我有一個類用於保存可以由用戶通過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