泛型JavaBeanObjectProperty的未选中分配错误,但ReadOnlyJavaBeanObjectProperty的未选中分配错误
在为泛型类型T构建JavaBeanObjectProperty时,我很难理解我需要做什么才能不丢失类型信息。一个有趣的细节是,我没有从IntelliJ获得ReadOnlyJavaBeanObjectProperty的此警告泛型JavaBeanObjectProperty的未选中分配错误,但ReadOnlyJavaBeanObjectProperty的未选中分配错误,java,javafx,adapter,Java,Javafx,Adapter,在为泛型类型T构建JavaBeanObjectProperty时,我很难理解我需要做什么才能不丢失类型信息。一个有趣的细节是,我没有从IntelliJ获得ReadOnlyJavaBeanObjectProperty的此警告 public class FooWrapper<T> { /** * Decorates a Foo instance with javafx stuff */ private final Foo foo; priva
public class FooWrapper<T> {
/**
* Decorates a Foo instance with javafx stuff
*/
private final Foo foo;
private final JavaBeanObjectProperty<T> value;
private final ReadOnlyJavaBeanObjectProperty<T> type;
public ParameterWrapper(Foo toWrap) {
this.foo = toWrap;
try {
this.value = new JavaBeanObjectPropertyBuilder<T>()
.bean(this.foo)
.name("value")
.build();
this.type = new ReadOnlyJavaBeanObjectPropertyBuilder<T>()
.bean(this.foo)
.name("type")
.build();
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
}
公共类FooWrapper{
/**
*用javafx东西装饰Foo实例
*/
私人决赛福福;
私有最终JavaBeanObject属性值;
私有最终只读JavaBeanObject属性类型;
公共参数包装器(Foo-toWrap){
this.foo=toWrap;
试一试{
this.value=newjavabeanObjectPropertyBuilder()
.bean(this.foo)
.名称(“价值”)
.build();
this.type=new ReadOnlyJavaBeanObjectPropertyBuilder()
.bean(this.foo)
.名称(“类型”)
.build();
}捕获(无此方法例外){
抛出新的运行时异常(e);
}
}
}
我读过,但一点也不明白。未经检查的警告不是你的错。由于API的实现很差,因此没有保留通用信息。存在与此相关的未解决问题:。这个问题被标记为“增强”,但我认为它是一个bug。 这个问题是由几乎所有返回原始类型的方法所导致的。唯一的例外是
build
,它返回JavaBeanObjectProperty
。但是,这并不重要,因为在调用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);
}
}
}
公共类FooWrapper{
非公开最终Foo代表;
私有最终JavaBeanObject属性值;
@SuppressWarnings(“未选中”)//原因:API错误
公共FooWrapper(Foo委托){
this.delegate=委托;
试一试{
value=JavaBeanObjectPropertyBuilder.create()
.bean(代表)
.名称(“价值”)
.build();
}catch(NoSuchMethodException-ex){
抛出新的运行时异常(ex);
}
}
}
这用于抑制未检查的警告。你可以阅读更多关于它的内容。最好将@SuppressWarnings
应用到尽可能窄的范围内,以避免抑制其他有用的警告
要进行比较,请查看签名的方法。它们都返回泛型类型