Непроверенные предупреждения - это не ваша вина. Общая информация не сохраняется, потому что API был плохо реализован. Существует нерешенная проблема, связанная с этим: JDK-8152399 . Проблема помечена как «улучшение», но я бы посчитал это ошибкой.
Проблема вызвана тем, что почти все методы JavaBeanObjectPropertyBuilder
возвращают необработанные типы . Единственным исключением является build
, который возвращает JavaBeanObjectProperty<T>
. Однако это не имеет значения, потому что к тому времени, когда вы позвонили build
, вы потеряли информацию о типе из-за вызова bean
и name
. К сожалению, это означает, что вы ничего не можете сделать, чтобы законно избавиться от предупреждения - вы можете только подавить его.
public class FooWrapper {
private final Foo delegate;
private final JavaBeanObjectProperty<SomeType> value;
@SuppressWarnings("unchecked") // Reason: Bad API
public FooWrapper(Foo delegate) {
this.delegate = delegate;
try {
value = JavaBeanObjectPropertyBuilder.create()
.bean(delegate)
.name("value")
.build();
} catch (NoSuchMethodException ex) {
throw new RuntimeException(ex);
}
}
}
Используется @SuppressWarnings
для подавления непроверенных предупреждений. Вы можете прочитать больше об этом здесь . Рекомендуется применять @SuppressWarnings
к самой узкой области видимости, чтобы избежать других полезных предупреждений.
Для сравнения посмотрите на сигнатуры методов ReadOnlyJavaBeanObjectPropertyBuilder
. Все они возвращают универсальный тип.