首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 註解屬性定義語法:String[] value() 詳解

     編輯:程式設計疑難解答

疑惑代碼

public @interface SuppressWarnings {
    String[] value();
}

初學者困惑:這不是方法嗎?為什麼沒有方法體?如何使用?

本質揭秘

這是註解的「屬性」(元素)聲明,而非方法。

  • 註解定義時,無參數、無拋出異常、有返回值的「方法」實為屬性。
  • 返回類型限制:基本類型、String、Class、enum、註解類型、以及以上類型的一維數組。
  • 默認值用 default 指定:String[] value() default {}。

使用示例

// 註解定義
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnno {
    String[] value() default {};  // 屬性名慣用 value
    int count() default 1;
}

// 使用註解
@MyAnno(value = {"a", "b"}, count = 3)
public class Demo {}

// 若屬性名為 value 且為唯一屬性,可省略 "value ="
@MyAnno({"a", "b"})
public class Demo2 {}

反射獲取屬性值

MyAnno anno = Demo.class.getAnnotation(MyAnno.class);
String[] vals = anno.value();  // 返回 ["a", "b"]
int cnt = anno.count();        // 返回 3

對比:普通介面 vs 註解介面

特性普通介面註解介面
關鍵字interface@interface
方法體可有默認方法/靜態方法不可有方法體
屬性語法無無參有返回值的「方法」
繼承支持多實現隱式繼承 java.lang.annotation.Annotation,不可顯式繼承

註解屬性本質是「配置數據」,編譯器將其編入字節碼,運行期通過反射讀取驅動框架邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved