2009-02-25 49 views
41

我剛剛發現了此功能。@ Java中的接口默認聲明用法

使用「@interface」語法聲明一個接口允許您設置一個默認值。

public @interface HelloWorld { 
    public String sayHello() default "hello world"; 
} 

這對我來說是新東西。假設如何使用該默認值。

我無法找到相應的引用,因爲www是完整的Java接口文件之前,「@」除了在Java 1.5中(它是否在0.5或0.4?)


編輯

感謝您的答案(我在某種程度上接近「註釋」,因爲我使用的標籤的話):P

我知道我應該讀過文檔年前!!! .. le t's see ...

許多API需要相當數量的樣板代碼。 For ....

+2

不要與Java 8默認接口方法混淆:http://java.dzone.com/articles/interface-default-methods-java – 2015-03-09 13:52:17

回答

55

你剛剛寫了一個annotation

尤其關於default語句:這是因爲註釋和接口不能有構造函數,所以這是註解屬性具有默認值的唯一方法。來自Java Language Specification

註釋類型元素可能會爲其指定默認值。這是通過關注關鍵字default以及元素的默認值後面的(空)參數列表完成的。

在讀取註釋時動態應用默認值;默認值不會編譯到註釋中。因此,即使在進行更改之前編譯的類(假定這些註釋缺少默認元素的顯式值),更改默認值也會影響註釋。

我注意到java.lang.annotation中的註釋都沒有使用默認值。


用法:您有一個註釋@HelloWorld與屬性sayHello。你可以把它放在一類是這樣的:

@HelloWorld(sayHello="Hi") 
public class MyClass { 
} 

既然你有一個默認值,你可以只是把

@HelloWorld 
public class MyClass { 
} 

(請注意,該文件說:「在註釋與一個單一的元素,該元素應該被命名爲value「;我相信這樣做的唯一原因是您可以只寫@HelloWorld("Hi")而不必命名該參數。)

正如您所寫的,您的註釋可以用於任何有效的程序元素(包括方法和變量聲明)。您可以使用@Target註釋進行更改。

最後,設置RetentionPolicy可以讓您確定註釋是否應該由編譯器丟棄,由VM丟棄還是始終保留。


兩個包,可能也很有趣:javax.annotationjavax.annotation.processing。而here是使用註釋處理進行源代碼分析的一個示例。

+1

+1:謝謝你mmyers:你對這個懶惰有什麼總結程序員? – OscarRyz 2009-02-25 22:07:53

+0

總結什麼?所有使用註釋? – 2009-02-25 22:13:26

4

這是一個annotation你聲明不是一個接口。它是在Java 1.5中添加的。