我有一个类用于保存可以由用户通过GUI更改的数值。 GUI有一个TextField(JavaFX),可以在其中编写所需的值。在泛型类中将字符串强制转换为数字
因为我想这个类是灵活的我做了使用泛型这个样子:
public class ConfigurableNumericField <T extends Number> {
private T value;
//...
public void setValue(T value){
this.value = value;
}
}
我创建一个对象是这样的:
ConfigurableNumericField <Integer> foo = new ConfigurableNumericField <> (/*...*/);
的问题是,在文本字段返回CharacterSequence
(可以铸造到String
)。但即使所有从Number
继承的类都有valueOf
方法,Number
也没有。
所以当我尝试setValue()
String
从TextField到类本身。我得到一个java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
。
我该怎么做?
'instanceof'的问题是您不知道运行时的泛型类型。 – 2012-07-10 10:50:43
难道你不能'如果(价值instanceof龙)...'等? – aioobe 2012-07-10 10:52:19
你可以。在这种情况下,这种情况下的值是一个'String',并且需要将其转换为'Number'类型在运行时是未知的。 – 2012-07-10 10:53:46