1

不変Optionalのすべてのメンバーが空かどうかを判断したいと思います。既知のオプションをすべて手動でチェックせずに、これを自動的に行う方法はありますか?

Optional メンバーごとにチェックを書いたとしても、後で誰かがやって来て、そのメソッドを更新せずに Optional フィールドを追加するのではないかと心配しています。

4

1 に答える 1

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,)

基本的に、それぞれが正確に 1 つのパラメーターを持つ 2 つのオーバーロードを探しています。1 つのパラメーターの型が である場合、もう 1 つTのパラメーターの型は ですSomeOptional<T>

于 2016-11-09T03:29:51.957 に答える