Java Immutables Library:检查所有Optional是否为空?

时间:2016-11-09 02:47:50

标签: java immutables-library

我想确定immutable的所有Optional成员是否为空。 有没有办法自动执行此操作而无需手动检查所有已知的Optionals?

我担心即使为每个可选成员写一张支票,有人会稍后再来,并添加一个可选字段而不更新该方法。

1 个答案:

答案 0 :(得分:3)

将来可能会发生变化,但我认为您可以尝试查看为可选成员生成的重载构建器方法:

  

对于名为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>