我想确定一个不可变Optional
的所有成员是否都是空的。有没有办法自动执行此操作而无需手动检查所有已知的 Optionals?
我担心即使确实为每个可选成员写了一张支票,也会有人稍后出现并添加一个可选字段而不更新该方法。
我想确定一个不可变Optional
的所有成员是否都是空的。有没有办法自动执行此操作而无需手动检查所有已知的 Optionals?
我担心即使确实为每个可选成员写了一张支票,也会有人稍后出现并添加一个可选字段而不更新该方法。
将来可能会发生变化,但我认为您可以尝试查看为可选成员生成的重载构建器方法:
对于名为 的可选属性
opt
,其中元素的类型T
opt(T)
设置现值T
opt(Optional<T>)
指定存在或不存在
SomeValue.java
@Value.Immutable
public abstract class SomeValue {
public abstract int foo();
public abstract Optional<Object> obj();
public abstract com.google.common.base.Optional<Double> d();
}
TestImmutables.java
public class TestImmutables {
public static void main(String [] args) {
SomeValue someValue = ImmutableSomeValue.builder().foo(2).build();
for (Method method : someValue.getClass().getDeclaredMethods()) {
System.out.print(method.getName() + "(");
for (Type t : method.getGenericParameterTypes()) {
System.out.print(t);
System.out.print(",");
}
System.out.println(")");
}
}
}
输出
每一行都是一个方法,注意为可选成员生成的方法。
builder()
equalTo(class immutables.ImmutableSomeValue,)
withObj(class java.lang.Object,) < obj
withObj(java.util.Optional<java.lang.Object>,) < obj
withD(com.google.common.base.Optional<java.lang.Double>,) < d
withD(double,) < d
d()
withFoo(int,)
foo()
obj()
equals(class java.lang.Object,)
toString()
hashCode()
copyOf(class immutables.SomeValue,)
基本上,您正在寻找两个重载,每个重载都只有一个参数,如果一个T
的参数类型是 ,则另一个的参数类型是SomeOptional<T>
。