- 注解的屬性也叫做成員變量。注解只有成員變量,沒有方法。
- 注解的成員變量在注解的定義中以“無形參的方法”形式來聲明
- 其方法名定義了該成員變量的名字,其返回值定義了該成員變量的類型。
- 注解中屬性可以有默認值,默認值需要用 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; }