Библиотека Immutables Java: Проверьте, все ли дополнительные опции пусты?

Я хотел бы определить, все ли Optional члены неизменяемые пусты. Есть ли способ сделать это автоматически, не проверяя вручную все известные дополнительные функции?

Я обеспокоен тем, что даже если вы напишете проверку для каждого дополнительного члена, кто-то придет позже и добавит дополнительное поле без обновления этого метода.

1 ответ

Это может измениться в будущем, но я думаю, что вы можете попытаться взглянуть на перегруженные методы компоновщика, сгенерированные для необязательных элементов:

Для необязательного атрибута с именем 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>,

Другие вопросы по тегам