2014-03-29 76 views
1

如何正确地设计这一点,所以它的工作:爪哇 - 问题与仿制药

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

只是为了澄清,'properties.get(PropertyName)'是一个'Property',对吗? –

+1

贾森Cs评论:更多代码显示涉及的类可能会有所帮助 - 特别是显示“E”的定义。你不能添加一个'... Listener ',其中'... Listener '是预期的,但很难根据当前的代码多说。 – Marco13

+1

每一个?是不同的 – 2014-03-29 20:58:56

回答

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

如果Properties是异构集合,则无法避免未经检查的转换警告。它是如何有意义的(在类型系统和Java一样弱的情况下)来静态类型化只能在运行时才知道类型的东西?