2010-03-21 36 views

回答

2

首先,因爲它沒有意義。靜態接口如何與非靜態接口不同?

第二,他們可以:

public class SomeClass { 
    static interface StaticInterface { 
    } 
} 
6

認爲像藍圖的接口。這沒什麼具體的。只要堅持(繼承)接口,就能實現一個類必須實現的藍圖。 (iirc)本身沒有「靜態」類的概念,即「靜態」不是類聲明中的關鍵字,就像它在C#中一樣。相反,靜態類是隻由靜態成員和方法組成的類。

如您所知,靜態成員和靜態方法屬於類,而不屬於實例。

由於接口只是一個藍圖,而不是具體的,所以「靜態」接口是沒有意義的。

對此的一個警告是內部類。

在一個類聲明中,你可以定義一個靜態的接口,但我認爲它什麼都不做。

+0

+1好解釋。但是,「我認爲它什麼都不做」是什麼意思? – helpermethod 2010-03-21 10:32:04

2

如果你指的是接口本身:因爲沒有真正有用的東西,你可以用static interface

意味着如果你的意思接口方法:因爲在Java中,靜態方法是一類的屬性,不能被覆蓋或多態地調用。

0

Actualy,我看到在接口某種意義上無法實現(特別是之前在Java 5中引入枚舉):

public static (or better final?) interface Colors { 
    public final int RED = 1; 
    public final int GREEN = 2; 
    ... 
} 

如果有人知道爲什麼這些事情不應該這樣做(假設我們仍然在java_1.4中),請發表評論。

+1

我認爲接口更多的是行爲而不是數據。如果沒有枚舉,我會將這個(靜態)數據移動到一個類中。 – spa 2010-03-21 10:12:22

+0

這就是「恆定接口反模式」。 – whiskeysierra 2010-03-21 10:32:15

+0

這實際上被稱爲常量接口反模式(請參閱Wikipedia以供參考)。另一種方法是使用具體類(私有構造函數)。 – helpermethod 2010-03-21 10:35:11