Java - 泛型问题

时间:2014-03-29 20:53:51

标签: java generics

如何正确设计,以便它可以工作:

在课程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 ?>)

1 个答案:

答案 0 :(得分:1)

public void <T> addPropertyChangedListener(String propertyName, OnPropertyChangedListener<T>   listener) {
    Property<T> property = (Property<T>)properties.get(propertyName);
    property.addPropertyChangedListener(listener);
}

如果Properties是异构集合,则无法避免未经检查的强制转换警告。它甚至有意义(在类型系统中像Java一样弱)静态地检查某些类型只能在运行时知道的东西?