1. 程式人生 > >註解之註解的屬性

註解之註解的屬性

  • 註解的屬性也叫做成員變數。註解只有成員變數,沒有方法。
  • 註解的成員變數在註解的定義中以“無形參的方法”形式來宣告
  • 其方法名定義了該成員變數的名字,其返回值定義了該成員變數的型別。
  • 註解中屬性可以有預設值,預設值需要用 default 關鍵值指定。
@interface AnnotationTest{
String value();
int sex() default 1;
}
// 註解中有多個屬性,賦值的方式:括號內以 value="",多個屬性之前用 ,隔開。

@AnnotationTest(value="3",sex=0)
public class Test {
}

有預設值且不想改值,無需在 @TestAnnotation 後的括號中為sex進行賦值了

如一個註解內僅只有一個成員變數且名字為 value 的屬性時,應用這個註解時可直接寫屬性值到括號內。

註解沒有任何屬性,括號都可以省略。

 自定義註解類編寫的一些規則:

  • 所有的Annotation會自動繼承java.lang.annotation.Annotation,並不能繼承別的類或是介面
  • 引數成員只能用public或預設(default)這兩個訪問權修飾
  •  引數成員只能用基本資料型別(char,boolean,byte、short、int、long、float、double)和String、Enum、Class、annotations資料型別,以及這一些型別的陣列

  • 要獲取類方法和欄位的註解資訊,必須通過Java的反射技術來獲取 Annotation物件,除此之外沒有別的獲取註解物件的方法

 示例程式碼:

/**
 * 註解的屬性
 * ★ 註解的屬性也叫做成員變數。註解只有成員變數,沒有方法。
 * ★ 註解的成員變數在註解的定義中以“無形參的方法”形式來宣告,
 * 其方法名定義了該成員變數的名字,其返回值定義了該成員變數的型別。
 * 註解中屬性可以有預設值,預設值需要用 default 關鍵值指定。
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationField { String tableName();//註解的成員變數:無形參方法 // 返回值是成員變數的型別,tableName是成員變數名稱 //預設值需要用 default 關鍵值指定 //以下報錯: //Integer flag Default 1;Default需要小寫 //Integer flag() default 1; 註解的成員變數在註解的定義中以“無形參的方法”形式來宣告,所以需要使用flag()來宣告 //Integer flag() default 1;報錯原因是因為引數成員 變數只能使用基本的資料型別 // (char,boolean,byte,short,int,float,double)和(String,Enum,Class,annotations)等這些資料型別,以及這一些型別的陣列 //不能使用包裝類物件,因為其是一個應用型別並不是一個基本資料型別 //註解中所有的成員物件在使用註解時都需要被使用,除了default預設值以外 //因為default值是預設的,我們不需要寫,使用註解時也知道這個值是多少 int flag() default 1; }
//當一個註解中只有一個註解屬性且名為value,
// 那麼在使用的時候可以直接使用@AnnotationTest1("tb_table")。
// 若果沒有屬性,括號也可以省略
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationTest1 {
    String value();
}
@AnnotationField(tableName = "tb_animal", flag = 0)//使用多個註解值,中間用,割開,如果不想使用預設值,可以在註解中為其重新賦值
@AnnotationTest1("tb_animal")
public class Animal {
    private String name;
    private String sex;
    private Integer age;
}