背景
最近使用了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>();
}
}