我有一个通用类,旨在保持不同类型属性的值。我想提供一个类型安全的方法来设置属性值,以便不可能为属性指定错误类型的值。通用方法中类类型参数的使用
我定义为所有属性种待实现的接口:
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