我有一個通用類,旨在保持不同類型屬性的值。我想提供一個類型安全的方法來設置屬性值,以便不可能爲屬性指定錯誤類型的值。通用方法中類類型參數的使用
我定義爲所有屬性種待實現的接口:
public interface Property<T> {
}
在使用類型參數T來指定屬性值的類型。然後假設類OrderProperty
實現了這個接口的屬性可以像
OrderProperty property1 = new OrderProperty<String>();
OrderProperty property2 = new OrderProperty<Integer>();
最初被定義予實現的類來保存像
public class Properties<K extends Property> {
private Map<K, Object> properties = new HashMap<K, Object>();
public <V> void set(K key, V value) {
properties.put(key, value);
}
}
屬性值的問題是,所述一組()方法顯然是不鍵入-safe因爲它不把財產,其價值型之間的聯繫,所以我可以很容易地編寫類似
Properties orderProperties = new Properties<OrderProperty>();
OrderProperty countProperty = new OrderProperty<Integer>();
orderProperties.set(countProperty, "1");
和它會編譯。
類型安全的實現是
public <V> void set(Property<V> key, V value) {
properties.put(key, value);
}
但當然不會無法編譯,因爲關鍵是通用型的不行。
我需要這樣的東西
public <V> void set(K<V> key, V value) {
properties.put(key, value);
}
但是這一個是語法不正確。
我想知道是否有任何方法來完成我所需要的。
'私人地圖 properties'這是爲什麼不'地圖'?我以爲你說'T'是值的類型。我很困惑。 –
polygenelubricants
2010-07-07 11:48:15
T用於在兩個位置命名類型參數:在接口屬性中,它引用值類型和類中的屬性,其中T用於指示屬性的類型(可能有許多類似OrderProperty,ItemProperty等等)。我想爲它們實現通用容器。 – fnt 2010-07-07 12:45:58
我編輯帖子以避免混淆 – fnt 2010-07-07 12:48:45