私はこの汎用インターフェースを持っています:
public interface TjbListener<T> {
public void hearChange(T t);
}
私はこのように使用します:
public interface ObjectOneListener extends TjbListener<ClassOne> {
}
ジェネリック型 U をパラメーターとして取り、それ自体が U のメソッド (2) を呼び出すメソッド (1) を持つ抽象ジェネリック クラス A を書きたいと思います。ジェネリック 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");
}
}
}
この質問を書いているときに考えた解決策の 1 つを以下に示しますが、それが本当に解決策であるかどうか、または理解できない微妙な問題があるかどうかはわかりません。
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);
}
}
}
更新:注意してください
同じクラスが異なるパラメーターで同じインターフェイスを実装できないため、このアプローチは私の特定のケースではほとんど役に立たないことがわかりました。以下にリンクされている質問を参照してください。これは、構成のような別の戦略を使用せずに、1 つのクラスを私の (または Johanna の) ソリューションで 2 つの異なるタイプのリスナーにすることはできないことを意味します。