2009-08-24 84 views
4

你可以創建一個只能應用於某些類和子類的接口嗎?只有某些類的接口?

如果我的界面加入到JComponent中的不同子類,我需要參考的JComponent的兩種方法,我的界面......我應該怎麼做呢?關閉我的頭頂,我可以通過從我的界面添加JComponent的方法來實現這一點。

這看起來很笨拙。有什麼更好的方法來做到這一點?

+0

問題是你的接口和JComponent有相同的方法名,會有衝突嗎? – Marius 2009-08-24 05:22:19

回答

6

顯而易見的解決方案是向您的界面添加一個方法,該方法返回組件(可能是this)。

JComponent getComponent(); 

甚至genericise你的接口:

public interface MyInterface<C extends JComponent> { 
    C getComponent(); 
    [...] 
} 

這不是偉大的設計,但它應該工作。

2

有可能是場景中這是行不通的,但是使用泛型,可以指定幾種類型:如果您想要的對象

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; 
    } 
} 
-1

你爲什麼要這麼做?

接口的本質不應該以這種方式受到限制,而且必須這樣做,對我來說,表明您的設計至少在某種程度上是過於複雜或更糟糕的缺陷。

我認爲,只要界面被明確命名並捕捉到一個概念,那麼它就符合其目的。

+0

我承認_many_年後,但我可以想到有幾個原因可能會有人想要這樣做,並不認爲我們應該暗示詢問這個想法表明有缺陷的設計 – 2018-01-16 21:21:41