中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么自定義注解類

發布時間:2021-07-29 16:01:01 來源:億速云 閱讀:125 作者:Leah 欄目:編程語言

Java中怎么自定義注解類,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

在Java框架中,經常會使用注解,而且還可以省很多事,來了解下自定義注解。

注解是一種能被添加到java代碼中的元數據,類、方法、變量、參數和包都可以用注解來修飾。注解對于它所修飾的代碼并沒有直接的影響

先寫一個自己的注解類

@Documented //會被javadoc命令識別@Retention(RetentionPolicy.RUNTIME) //相當于作用時期,比如:運行期、編譯期@Target({ElementType.METHOD}) //相當于作用域,比如方法、類public @interface MyValue {  String value();  //也可以這么寫,就是說,它的默認值是hello  //String value() default "hello";}

然后解析上邊用到的那兩個類:

public enum RetentionPolicy {  SOURCE,  CLASS,  RUNTIME}

public enum ElementType {  /** Class, interface (including annotation type), or enum declaration */  TYPE,  FIELD,  METHOD,  PARAMETER,  CONSTRUCTOR,  LOCAL_VARIABLE,  ANNOTATION_TYPE,  PACKAGE}

可以看到,是兩個枚舉類,也就是我們自定義的注解有一定的時間和空間作用域。好了,我們的自定義注解已經完成了(對的,自定義注解就上邊那一段代碼),那我們就來看看要怎么有用呢?很容易啊,就和其他的注解一樣,寫在我們要用到的地方就好了。(對的,我確定不是在開玩笑)

public class Person {    @MyValue(value="張三")  private String name;  /*  為什么要寫setter和getter,很快你就會知道   */  public String getName() {    return name;  }  public void setName(String name) {    this.name = name;  }}

然后我們在其他地方去拿

Person person = new Person();System.out.println(person.getName());//null//這就很難受,按道理來說,不是應該是張三嗎?

大家都知道,像Spring這種框架都是通過反射來實現的,我們就模擬一個“編譯類”,我們是在屬性上用的注解,所以就先用反射來拿到類的所有屬性

public static void main(String[] args) throws NoSuchFieldException {    Person person = new Person();    //按理來說,我們是拿到這個Person.class的所有的屬性,然后遍歷,來挨個注入,但是這里我們明明確我們的屬性名,所以就簡單化了    Field  field = Person.class.getDeclaredField("name");    MyValue annotation = field.getAnnotation(MyValue.class);//拿到注解類    String name = annotation.value();//這個value()就是我們在MyValue類中的的屬性    //然后我們就注入到這個類中,這時就用到了setter方法    person.setName(name);    System.out.println("通過自定義注解后的person的name是:" + person.getName());  }

是的,這樣我們就通過了自定義注解給Person注入了一個name屬性,但是在實際運用中不可能這么復雜,這只是入門了一下,我們可以將這個“模擬的編譯類”組裝成一個工具類,以便我們在實際中運用。

關于Java中怎么自定義注解類問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

钦州市| 阳谷县| 灵石县| 咸宁市| 米易县| 无为县| 交口县| 门源| 阿克苏市| 龙山县| 高清| 高安市| 隆尧县| 中江县| 兴海县| 淮北市| 高密市| 新平| 霞浦县| 田阳县| 夏河县| 秀山| 盘山县| 乌兰浩特市| 杂多县| 安多县| 越西县| 华宁县| 黔江区| 吉安市| 多伦县| 西和县| 长葛市| 中阳县| 噶尔县| 平潭县| 威宁| 临夏市| 福建省| 西安市| 常山县|