不変Optional
のすべてのメンバーが空かどうかを判断したいと思います。既知のオプションをすべて手動でチェックせずに、これを自動的に行う方法はありますか?
Optional メンバーごとにチェックを書いたとしても、後で誰かがやって来て、そのメソッドを更新せずに Optional フィールドを追加するのではないかと心配しています。
不変Optional
のすべてのメンバーが空かどうかを判断したいと思います。既知のオプションをすべて手動でチェックせずに、これを自動的に行う方法はありますか?
Optional メンバーごとにチェックを書いたとしても、後で誰かがやって来て、そのメソッドを更新せずに Optional フィールドを追加するのではないかと心配しています。
将来変更される可能性がありますが、オプションのメンバーに対して生成されたオーバーロードされたビルダー メソッドを見てみることができると思います。
という名前のオプションの属性の場合
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>
。