您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)java中注解的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1、如果注解中有屬性,那么必須給屬性賦值。
package com.lxc.Test; // 定義一個注解 public @interface Annotation { String name(); // 看似name像一個方法,實際上我們把name稱為屬性 }
使用上邊注解:
package com.lxc.Test; public class Test { @Annotation(name="lxc") public void test() { } }
2、如果注解中有屬性,且沒有定義默認(rèn)值,那么在使用注解的時候,必須給屬性賦值。
public @interface Annotation { String name(); int age(); }
public class Test { @Annotation(name="lxc", age=20) public void test() { } }
但是注解中如果有默認(rèn)值,在使用注解時,可以不給屬性賦值
public class Test { @Annotation(name="lxc") public void test() { } }
public @interface Annotation { String name(); String password() default "123"; }
3、value() 屬性
如果注解中的一個屬性名是value,且有且只有一個value(),在使用注解的時候,屬性名可以省略
public class Test { @Annotation("lxc") public void test() { } }
public @interface Annotation { String value(); String password() default "123"; }
注解中屬性的類型有哪些
byte、short、int、float、double、boolean、char、String、Class、枚舉
數(shù)組:
如果數(shù)組屬性中有一個元素,那么數(shù)組的大括號可以省略:
public @interface Annotation { String[] name(); }
public class Test { // @Annotation(name={"lxc"}) // 寫法一 @Annotation(name="lxc") // 寫法二 public void test() { } }
枚舉:
public enum MyEnum { className, name, age, }
public @interface Annotation { String[] name(); MyEnum[] student(); }
public class Test { @Annotation(name="lxc", student = {MyEnum.className, MyEnum.age}) public void test() { } }
注解如何使用:
(1)標(biāo)記一個注解只能出現(xiàn)在類或者方法上
@Target(value = {ElementType.TYPE, ElementType.METHOD}) public @interface Annotation { String userName(); MyEnum[] student(); }
(2)標(biāo)記一個注解可以被反射機制所讀取
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // 標(biāo)記注解只能出現(xiàn)在類上 @Target(value = {ElementType.TYPE, ElementType.METHOD}) // 標(biāo)記注解可以被反射機制所讀取 @Retention(RetentionPolicy.RUNTIME) public @interface Annotation { String userName(); MyEnum[] student(); }
通過反射機制來獲取。
(1)獲取類上邊注解的屬性:
注解類:
package com.lxc.Test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // 標(biāo)記注解只能出現(xiàn)在類上 @Target(value = {ElementType.TYPE, ElementType.METHOD}) // 標(biāo)記注解可以被反射機制所讀取 @Retention(RetentionPolicy.RUNTIME) public @interface Annotation { String userName() default "呂星辰"; }
使用注解類:
// myAnnotation @Annotation(userName = "哈哈") public class myAnnotation { }
獲取注解類中 的屬性:
package com.lxc.Test; /** * c.isAnnotationPresent(注解類.class) : 判斷一個類上是否有注解,返回true、false * c.getAnnotation(注解類.class) : 獲取注解類的實例 * */ public class Test { public static void main(String[] args) throws Exception{ Class c = Class.forName("com.lxc.Test.myAnnotation"); System.out.println(c.isAnnotationPresent(Annotation.class)); // 判斷一個類是否有:Annotation這個注解 if(c.isAnnotationPresent(Annotation.class)) { // 獲取注解對象 Annotation ann = (Annotation) c.getAnnotation(Annotation.class); // 通過注解對象獲取屬性值 System.out.println(ann.userName()); } } }
(2)獲取類中方法上邊注解的屬性:
注解類:
package com.lxc.Test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // 標(biāo)記注解只能出現(xiàn)在類上 @Target(value = {ElementType.TYPE, ElementType.METHOD}) // 標(biāo)記注解可以被反射機制所讀取 @Retention(RetentionPolicy.RUNTIME) public @interface Annotation { String userName(); String password(); }
在方法上使用注解及獲取方法上邊的注解:
分析:想獲取方法上的注解,首先需要獲取該方法,獲取該方法的前提,獲取該方法的類:
package com.lxc.Test; import java.lang.reflect.Method; public class UserAnnotation { @Annotation(userName = "lxc", password = "123") public void getUser() {} public static void main(String[] args) throws Exception{ // 通過反射獲取類 Class c = Class.forName("com.lxc.Test.UserAnnotation"); // 通過反射獲取類中的方法 Method getUserMethod = c.getDeclaredMethod("getUser"); // 判斷方法是否有 Annotation 這個注解 if(getUserMethod.isAnnotationPresent(Annotation.class)) { Annotation ann = getUserMethod.getAnnotation(Annotation.class); System.out.println(ann.userName()); // lxc System.out.println(ann.password()); // 123 } } }
關(guān)于“java中注解的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。