2012-05-15 119 views
5

我知道在Java中,有人可以通過聲明public static final來包含接口中的常量。但是,假設我有這樣一個接口,稱爲I,它只包含公共靜態最終常量和方法簽名,以及一個名爲C的類。我爲什麼要在C中實現I?即我爲什麼會做以下幾點:在接口中定義常量是什麼意思?

public class C implements I

由於常數是公開的,靜態的,不會我可以直接通過I訪問它們?

回答

10

這個(反)模式非常有用。這曾經是一種常用的技術,但是現在您可以使用import static來導入常數,就像它失寵一樣。其中的一個原因,以避免它是一組常量真的不是一個接口 - 它只是一個價值的一羣 - 而且使它的界面讓你做奇怪的事情就像寫

ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface; 

if (m instanceof ConstantInterfaceWithNoMethods) 

剛剛沒有意義在這方面。

希望這會有所幫助!

+0

非常感謝解釋!我會盡快接受這個答案:) –

0

一般來說,你不需要。一個原因可能是,界面I是一個「標記界面」。

+0

什麼是「標記界面」? –

+1

這是一個沒有任何方法的接口。不知道這個答案如何與OP的問題相關。 –

+1

@ NathanSabruka-一個標記接口是一個類似於'Serializable'的接口,它沒有任何方法,只是作爲一個類有一些屬性的「標記」。自引入註釋以來,它們也失寵了。 – templatetypedef

5

這是一個可以讓你從界面訪問常量沒有遍地鍵入該接口的名稱Java的模式。這種模式早在enum已經進入語言之前很多年了。

有些人認爲它有問題的,因爲它會導致創建不指定合同接口。因爲它可以讓你使用這些常量的名稱,而不必與I.前綴他們

相關問題