簡體   English   中英

Java Immutables Library:檢查所有Optional是否為空?

[英]Java Immutables Library: Check if all Optionals are empty?

我想確定一個不可變的所有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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM