我有這樣的通用接口,使用2級仿製藥:在抽象類定義
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);
}
}
}
UPDATE:謹防
我剛剛發現,這種做法對我的具體情況幾乎是無用的,因爲同一類無法實現用不同的參數相同的接口。看到下面鏈接的問題。這意味着我不能用一個類作爲我的(或約翰娜的)解決方案的兩種不同類型的聽衆,而不使用不同的組合策略。
How to make a Java class that implements one interface with two generic types?
我想知道,你嘗試了什麼問題解決?它看起來有點過度設計... – aviad 2012-04-27 06:03:00
我認爲你的解決方案是好的 – 2012-04-27 06:04:40
我第二,你的解決方案很好,我不同意@aviad,它沒有被過度強調。 – Snicolas 2012-04-27 06:05:37