我有这两个接口:
public interface Attribute<N> {
Class<N> getAttributeType();
}
public interface FieldSubscriber<N> {
void notifySubscriber(N value);
}
现在我有一个 FieldRelationsManager 类,它将处理不同类型的字段关系,例如,它将提供一个订阅功能,其中 FieldSubscriber 可以订阅以了解某个值持有者的值变化。所以管理器需要一个给定属性的 FieldSubscribers 列表,以便知道它必须通知哪些订阅。所以 FieldRelationsManager 看起来像:
public class FieldRelationsManager {
private Map<Attribute<?>, List<FieldSubscriber<?>>> subscribers;
.....
.....
}
为了确保经理的客户为同一个 N 的属性提供 FieldSubscriptor,我试图提供一种方法,例如:
public <N> void subscribe(Attribute<N> attr, FieldSubscriber<N> subscriber){
if(subscribers==null){
subscribers=new HashMap<Attribute<?>, List<FieldSubscriber<?>>>();
}
List<FieldSubscriber<N>> list=subscribers.get(attr);
....
....
}
这不会编译,因为:subscribers.get(attr); 返回:
List<FieldSubscriber<?>>
并且不能转换为:
List<FieldSubscriber<N>>
所以问题是,有没有其他方法可以编写代码以确保 N 参数相同?