請看下面的例子:不能包含具有不同參數的相同接口?
public class Sandbox {
public interface Listener<T extends JComponent> {
public void onEvent(T event);
}
public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
}
}
這失敗,出現以下錯誤
/media/PQ-WDFILES/programming/Sandbox/src/Sandbox.java:20: Sandbox.Listener cannot be inherited with different arguments: <javax.swing.JPanel> and <javax.swing.JLabel>
public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
^
1 error
但爲什麼呢?生成的方法沒有重疊。事實上,這實際上意味着
public interface AnotherInterface {
public void onEvent(JPanel event);
public void onEvent(JLabel event);
}
那裏沒有重疊。那麼爲什麼它失敗了?
如果你想知道我在做什麼,有一個更好的解決方案:我有一大堆的活動和一個監聽器的界面,幾乎完全一樣上面的Listener
類。我想創建一個適配器和一個適配器接口,爲此我需要擴展所有的Listener接口和一個特定的事件。這可能嗎?有一個更好的方法嗎?
啊,我忘記了類型擦除。你知道另一種方法來完成我想要做的事嗎? – TheLQ 2010-12-12 16:38:47
@TheLQ,已更新。 – 2010-12-12 17:11:49
@Stas每個事件看起來像是一噸代碼(〜50)。也許我應該回到顯式創建每個事件的偵聽器? – TheLQ 2010-12-12 17:22:53