1.8 自定义注解
前面我們學(xué)習(xí)了 Java 的基本注解和元注解,如果這兩種注解不能滿足你的需求,可以自定義注解。下面介紹如何自定義注解。
聲明自定義注解使用 @interface 關(guān)鍵字(interface 關(guān)鍵字前加 @ 符號(hào))實(shí)現(xiàn)。定義注解與定義接口非常像,如下代碼可定義一個(gè)簡(jiǎn)單形式的注解類型。
// 定義一個(gè)簡(jiǎn)單的注解類型 public @interface Test { }上述代碼聲明了一個(gè) Test 注解。默認(rèn)情況下,注解可以在程序的任何地方使用,通常用于修飾類、接口、方法和變量等。
定義注解和定義類相似,注解前面的訪問修飾符和類一樣有兩種,分別是公有訪問權(quán)限(public)和默認(rèn)訪問權(quán)限(默認(rèn)不寫)。一個(gè)源程序文件中可以聲明多個(gè)注解,但只能有一個(gè)是公有訪問權(quán)限的注解。且源程序文件命名和公有訪問權(quán)限的注解名一致。
不包含任何成員變量的注解稱為標(biāo)記注解,例如上面聲明的 Test 注解以及基本注解中的 @Override 注解都屬于標(biāo)記注解。根據(jù)需要,注解中可以定義成員變量,成員變量以無形參的方法形式來聲明,其方法名和返回值定義了該成員變量的名字和類型。代碼如下所示:
public @interface MyTag {// 定義帶兩個(gè)成員變量的注解// 注解中的成員變量以方法的形式來定義String name();int age(); }以上代碼中聲明了一個(gè) MyTag 注解,定義了兩個(gè)成員變量,分別是 name 和 age。成員變量也可以有訪問權(quán)限修飾符,但是只能有公有權(quán)限和默認(rèn)權(quán)限。
如果在注解里定義了成員變量,那么使用該注解時(shí)就應(yīng)該為它的成員變量指定值,如下代碼所示。
public class Test {// 使用帶成員變量的注解時(shí),需要為成員變量賦值@MyTag(name="xx", age=6)public void info() {...}... }注解中的成員變量也可以有默認(rèn)值,可使用 default 關(guān)鍵字。如下代碼定義了 @MyTag 注解,該注解里包含了 name 和 age 兩個(gè)成員變量。
public @interface MyTag {// 定義了兩個(gè)成員變量的注解// 使用default為兩個(gè)成員變量指定初始值String name() default "C語言中文網(wǎng)";int age() default 7; }如果為注解的成員變量指定了默認(rèn)值,那么使用該注解時(shí)就可以不為這些成員變量賦值,而是直接使用默認(rèn)值。
public class Test {// 使用帶成員變量的注解// MyTag注釋的成員變量有默認(rèn)值,所以可以不為它的成員變量賦值@MyTagpublic void info() {...}... }當(dāng)然也可以在使用 MyTag 注解時(shí)為成員變量指定值,如果為 MyTag 的成員變量指定了值,則默認(rèn)值不會(huì)起作用。
根據(jù)注解是否包含成員變量,可以分為如下兩類。
總結(jié)
- 上一篇: 1.7 元注解作用及使用
- 下一篇: 1.9 通过反射获取注解信息