美文网首页
[lombok] @Singular 默认值的问题

[lombok] @Singular 默认值的问题

作者: 程序员驿站 | 来源:发表于2017-05-06 08:30 被阅读2810次

背景

最近使用了lombok的@Singular标签碰见了一个问题,觉得@Singular会将成员变量的默认值都设置成null,其实不是,这个注解把每个不同类型的成员变量都设置成默认值,使用时候还是要注意下

官方例子

使用lombok

import lombok.Builder;
import lombok.Singular;
import java.util.Collection;
import java.util.Set;
import java.util.SortedMap;
import com.google.common.collect.ImmutableList;
@Builder
public class SingularExample<T extends Number> {
    private @Singular Set<String> occupations;
    private @Singular("axis") ImmutableList<String> axes;
    private @Singular SortedMap<Integer, T> elves;
    private @Singular Collection<?> minutiae;
}

对应的代码

import java.util.Collection;
import java.util.Set;
import java.util.SortedMap;

import com.google.common.collect.ImmutableList;

public class SingularExample<T extends Number> {
    private Set<String> occupations;
    private ImmutableList<String> axes;
    private SortedMap<Integer, T> elves;
    private Collection<?> minutiae;

    SingularExample(Set<String> occupations, ImmutableList<String> axes, SortedMap<Integer, T> elves, Collection<?> minutiae) {
        this.occupations = occupations;
        this.axes = axes;
        this.elves = elves;
        this.minutiae = minutiae;
    }

    public static class SingularExampleBuilder<T extends Number> {
        private java.util.ArrayList<String> occupations;
        private com.google.common.collect.ImmutableList.Builder<String> axes;
        private java.util.ArrayList<Integer> elves$key;
        private java.util.ArrayList<T> elves$value;
        private java.util.ArrayList<java.lang.Object> minutiae;

        SingularExampleBuilder() {
        }

        public SingularExampleBuilder<T> occupation(String occupation) {
            if (this.occupations == null) {
                this.occupations = new java.util.ArrayList<String>();
            }

            this.occupations.add(occupation);
            return this;
        }

        @java.lang.SuppressWarnings("all")
        public SingularExampleBuilder<T> occupations(java.util.Collection<? extends String> occupations) {
            if (this.occupations == null) {
                this.occupations = new java.util.ArrayList<String>();
            }

            this.occupations.addAll(occupations);
            return this;
        }

        public SingularExampleBuilder<T> axis(String axis) {
            if (this.axes == null) {
                this.axes = com.google.common.collect.ImmutableList.builder();
            }

            this.axes.add(axis);
            return this;
        }

        public SingularExampleBuilder<T> axes(java.lang.Iterable<? extends String> axes) {
            if (this.axes == null) {
                this.axes = com.google.common.collect.ImmutableList.builder();
            }

            this.axes.addAll(axes);
            return this;
        }

        public SingularExampleBuilder<T> elf(Integer elfKey, T elfValue) {
            if (this.elves$key == null) {
                this.elves$key = new java.util.ArrayList<Integer>();
                this.elves$value = new java.util.ArrayList<T>();
            }

            this.elves$key.add(elfKey);
            this.elves$value.add(elfValue);
            return this;
        }

        public SingularExampleBuilder<T> elves(java.util.Map<? extends Integer, ? extends T> elves) {
            if (this.elves$key == null) {
                this.elves$key = new java.util.ArrayList<Integer>();
                this.elves$value = new java.util.ArrayList<T>();
            }

            for (java.util.Map.Entry<? extends Integer, ? extends T> $lombokEntry : elves.entrySet()) {
                this.elves$key.add($lombokEntry.getKey());
                this.elves$value.add($lombokEntry.getValue());
            }
            return this;
        }

        public SingularExampleBuilder<T> minutia(java.lang.Object minutia) {
            if (this.minutiae == null) {
                this.minutiae = new java.util.ArrayList<java.lang.Object>();
            }

            this.minutiae.add(minutia);
            return this;
        }

        public SingularExampleBuilder<T> minutiae(java.util.Collection<?> minutiae) {
            if (this.minutiae == null) {
                this.minutiae = new java.util.ArrayList<java.lang.Object>();
            }

            this.minutiae.addAll(minutiae);
            return this;
        }

        public SingularExample<T> build() {
            java.util.Set<String> occupations;
            switch (this.occupations == null ? 0 : this.occupations.size()) {
                case 0:
                    occupations = java.util.Collections.emptySet();
                    break;

                case 1:
                    occupations = java.util.Collections.singleton(this.occupations.get(0));
                    break;

                default:
                    occupations = new java.util.LinkedHashSet<String>(this.occupations.size() < 1073741824 ? 1 + this.occupations.size() + (this.occupations.size() - 3) / 3 : java.lang.Integer.MAX_VALUE);
                    occupations.addAll(this.occupations);
                    occupations = java.util.Collections.unmodifiableSet(occupations);

            }

            com.google.common.collect.ImmutableList<String> axes = this.axes == null ? com.google.common.collect.ImmutableList.<String>of() : this.axes.build();

            java.util.SortedMap<Integer, T> elves = new java.util.TreeMap<Integer, T>();
            if (this.elves$key != null)
                for (int $i = 0; $i < (this.elves$key == null ? 0 : this.elves$key.size()); $i++)
                    elves.put(this.elves$key.get($i), this.elves$value.get($i));
            elves = java.util.Collections.unmodifiableSortedMap(elves);

            java.util.Collection<java.lang.Object> minutiae;
            switch (this.minutiae == null ? 0 : this.minutiae.size()) {
                case 0:
                    minutiae = java.util.Collections.emptyList();
                    break;

                case 1:
                    minutiae = java.util.Collections.singletonList(this.minutiae.get(0));
                    break;

                default:
                    minutiae = java.util.Collections.unmodifiableList(new java.util.ArrayList<java.lang.Object>(this.minutiae));

            }

            return new SingularExample<T>(occupations, axes, elves, minutiae);
        }

        @java.lang.Override
        public java.lang.String toString() {
            return "SingularExample.SingularExampleBuilder(occupations=" + this.occupations + ", axes=" + this.axes + ", elves$key=" + this.elves$key + ", elves$value=" + this.elves$value + ", minutiae=" + this.minutiae + ")";
        }
    }

    @java.lang.SuppressWarnings("all")
    public static <T extends Number> SingularExampleBuilder<T> builder() {
        return new SingularExampleBuilder<T>();
    }
}

相关文章

网友评论

      本文标题:[lombok] @Singular 默认值的问题

      本文链接:https://www.haomeiwen.com/subject/vddetxtx.html