你可以創建一個只能應用於某些類和子類的接口嗎?只有某些類的接口?
如果我的界面只加入到JComponent中的不同子類,我需要參考的JComponent的兩種方法,我的界面......我應該怎麼做呢?關閉我的頭頂,我可以通過從我的界面添加JComponent的方法來實現這一點。
這看起來很笨拙。有什麼更好的方法來做到這一點?
你可以創建一個只能應用於某些類和子類的接口嗎?只有某些類的接口?
如果我的界面只加入到JComponent中的不同子類,我需要參考的JComponent的兩種方法,我的界面......我應該怎麼做呢?關閉我的頭頂,我可以通過從我的界面添加JComponent的方法來實現這一點。
這看起來很笨拙。有什麼更好的方法來做到這一點?
顯而易見的解決方案是向您的界面添加一個方法,該方法返回組件(可能是this
)。
JComponent getComponent();
甚至genericise你的接口:
public interface MyInterface<C extends JComponent> {
C getComponent();
[...]
}
這不是偉大的設計,但它應該工作。
有可能是場景中這是行不通的,但是使用泛型,可以指定幾種類型:如果您想要的對象
interface Foo { void frobulize(); }
class Bar {
<T extends JComponent & Foo> String doFoo(T obj){
obj.frobulize();
return obj.getToolTipText();
}
}
爲在非參數化類型的字段,添加的類型參數構造函數(一個鮮爲人知的功能,這會混淆並打動你的同事):
class Quux {
private final Foo foo;
private final JComponent component;
public <T extends JComponent & Foo> Quux(T fc){
foo = fc;
component = fc;
}
}
你爲什麼要這麼做?
接口的本質不應該以這種方式受到限制,而且必須這樣做,對我來說,表明您的設計至少在某種程度上是過於複雜或更糟糕的缺陷。
我認爲,只要界面被明確命名並捕捉到一個概念,那麼它就符合其目的。
我承認_many_年後,但我可以想到有幾個原因可能會有人想要這樣做,並不認爲我們應該暗示詢問這個想法表明有缺陷的設計 – 2018-01-16 21:21:41
問題是你的接口和JComponent有相同的方法名,會有衝突嗎? – Marius 2009-08-24 05:22:19