我有这个通用接口:
public interface TjbListener<T> {
public void hearChange(T t);
}
我这样使用:
public interface ObjectOneListener extends TjbListener<ClassOne> {
}
我想编写一个抽象泛型类 A,它以泛型类型 U 作为参数,并有一个方法 (1),它本身在 U 上调用方法 (2)。下面是我的尝试 U 应该扩展(或可能实现?)通用 TjbListener 接口。
public abstract class ListenerInformer<U extends TjbListener<"what should I write here">> {
List<U> mListeners = new ArrayList<U>();
public void addListener(U u){
mListeners.add(u);
}
public void informAll("what should I write here"){
for(U u:mListeners){
u.hearChange("what should I write here");
}
}
}
我在写这个问题时想到的一个解决方案如下,但我不知道它是否真的是一个解决方案,或者它是否有我不明白的微妙问题:
public abstract class ListenerInformer<U extends TjbListener<T>,T> {
List<U> mListeners = new ArrayList<U>();
public void addListener(U u){
mListeners.add(u);
}
public void informAll(T t){
for(U u:mListeners){
u.hearChange(t);
}
}
}
更新:当心
我刚刚发现这种方法对我的特殊情况几乎没有用,因为同一个类不能用不同的参数实现同一个接口。请参阅下面链接的问题。这意味着我不能用我的(或 Johanna 的)解决方案让一个班级成为两种不同类型的听众,而不使用像组合这样的不同策略。