2010-08-21 105 views
6

在Java中,有沒有辦法阻止擴展接口。如何防止擴展接口

由於final不能被添加到interface,我很想知道是否有方法,以防止擴展接口。

+4

這樣做的動機是什麼?在我看來,從語義上講,沒有什麼可以獲得,如果你明白接口是什麼以及它們用於什麼。 – Santa 2010-08-21 16:29:30

+0

如果你不創建它不能被擴展的接口,除非some1創建它,所以告訴no1。 – IAdapter 2010-08-21 20:29:56

回答

2

沒有辦法阻止擴展接口。

您可以檢測到有人在運行時使用反射擴展了您的接口。

+0

您能否詳細說明我們如何才能找到接口是否通過反射擴展? – JWhiz 2010-08-21 15:53:25

+0

@JWhiz:你的第二個問題與這個非常相似:http://stackoverflow.com/questions/435890/find-java-classes-implementing-an-interface唯一的區別是你對接口感興趣,而不是類,但技術是一樣的。 – 2010-08-21 16:05:46

3

這裏的問題是概念問題。接口是爲了擴展,因爲它們不能按原樣使用。

你可以做的是把接口放在一個包中,並給它默認的可見性。只有該包中的類才能實現該接口。

但是使用該解決方案,您也失去了使用該包之外的接口的可能性,因此它不是真正的解決方案。

+0

我認爲他意味着從給定的接口擴展了另一個接口。 – 2010-08-21 15:45:52

+3

沒錯,但這個概念仍然是關鍵:接口只是說某些方法以某種方式工作的一種方式。擴展接口就是說系統中還有一些其他接口。禁止以與「最終」關鍵字與類一起工作的方式來定義接口是沒有意義的,其中實際代碼可能最終以與原始設計相反的方式使用,如果該類被擴展的話。 – 2010-08-21 15:53:05

0

這與以前提出的問題非常相似 - final interface in java

我給出了兩個答案。

  1. 是的,通過byte code engineering。生成的接口無法擴展但無實際價值
  2. 是,annotations是無法通過其他接口擴展的接口。

另外,你可以把接口放在一個類中,給它一個私人訪問修飾符,並確保該類文件中沒有接口擴展它。