如何正确设计,以便它可以工作:
在课程Property<E>
中:
public void addPropertyChangedListener(OnPropertyChangedListener<E> listener) {
listeners.add(listener);
}
在课程ViewModelBase
中:
public void addPropertyChangedListener(String propertyName, OnPropertyChangedListener<?> listener) {
Property<?> property = properties.get(propertyName);
property.addPropertyChangedListener(listener); // I get error here
}
我得到错误:
The method addPropertyChangedListener(Property.OnPropertyChangedListener<capture#5-of ?>)
in the type Property<capture#5-of ?> is not applicable for the arguments
(Property.OnPropertyChangedListener<capture#6-of ?>)
答案 0 :(得分:1)
public void <T> addPropertyChangedListener(String propertyName, OnPropertyChangedListener<T> listener) {
Property<T> property = (Property<T>)properties.get(propertyName);
property.addPropertyChangedListener(listener);
}
如果Properties
是异构集合,则无法避免未经检查的强制转换警告。它甚至有意义(在类型系统中像Java一样弱)静态地检查某些类型只能在运行时知道的东西?