Reputation: 2541
How do I properly design this, so it would work:
In class Property<E>
:
public void addPropertyChangedListener(OnPropertyChangedListener<E> listener) {
listeners.add(listener);
}
In class ViewModelBase
:
public void addPropertyChangedListener(String propertyName, OnPropertyChangedListener<?> listener) {
Property<?> property = properties.get(propertyName);
property.addPropertyChangedListener(listener); // I get error here
}
Error I get:
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 ?>)
Upvotes: 1
Views: 101
Reputation: 5239
public void <T> addPropertyChangedListener(String propertyName, OnPropertyChangedListener<T> listener) {
Property<T> property = (Property<T>)properties.get(propertyName);
property.addPropertyChangedListener(listener);
}
There is no way to avoid an unchecked cast warning if Properties
is a heterogeneous collection. How does it even make sense (in a type system as weak as that of Java) to statically typecheck something whose type can only be known at runtime?
Upvotes: 1