对于这段代码(JavaFX)。
StringProperty sp;
DoubleProperty dp;
StringConverter<Double> converter = new DoubleStringConverter();
Bindings.bindBidirectional(sp, dp, converter);
我收到编译错误(在Eclipse IDE中)
这是方法签名:
public static <T> void bindBidirectional(Property<String> stringProperty, Property<T> otherProperty, StringConverter<T> converter)
但是,如果删除(StringConverter的)参数化,那么我只会得到警告,并且代码可以正常工作。
StringConverter converter = new DoubleStringConverter();
我试图避免使用原始类型的泛型,以便不必在我的IDE中禁止显示警告。
最佳答案
这可能是JavaFX属性中的一个小“陷阱”。如果您仔细查看签名:
static <T> void bindBidirectional(Property<java.lang.String> stringProperty,
Property<T> otherProperty, StringConverter<T> converter)
转换器的参数必须与属性的参数匹配。但是(这里令人惊讶的)
DoubleProperty
实现了Property<Number>
,因此bindBidirectional
中的不匹配。幸运的是,解决方案很简单:使用NumberStringConverter
:StringProperty sp = ...;
DoubleProperty dp = ...;
StringConverter<Number> converter = new NumberStringConverter();
Bindings.bindBidirectional(sp, dp, converter);
您可以获得指定转换格式的额外好处。