成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

注解(待完善)

Channe / 2721人閱讀

摘要:中提供了前四個(gè)元注解。在中新添加了最后一個(gè)注解。指定了注解可以用于的范圍??梢阅J(rèn)設(shè)置為空字符串如果沒(méi)有默認(rèn)值的話,在使用的時(shí)候則需要對(duì)它進(jìn)行賦值。反射程序運(yùn)行時(shí)獲取注解的值,設(shè)置為??梢允褂每兆址?/p>

分類(lèi)

元注解(meta-annotation)

java元注解就是用來(lái)注解其他注解??梢岳斫鉃樵⒔馐瞧渌x的注解的基礎(chǔ)。
元注解有 @Retention、@Documented@Target、@Inherited、@Repeatable 。jdk1.5中 提供了前四個(gè)元注解。在jdk1.8中新添加了最后一個(gè)注解。
下面我們開(kāi)始新定義一個(gè)注解,對(duì)這些元注解加以說(shuō)明。

首先我們定義一個(gè)@GoodMan的注解

@Retention

這個(gè)注解是用來(lái)解釋說(shuō)明它所注解的注解的存活期。
它的值可以有如下三種

RetentionPolicy.SOURCE:注解只在源碼階段保留,在編譯器進(jìn)行編譯時(shí)它將被丟棄忽視。

RetentionPolicy.CLASS:注解只被保留到編譯進(jìn)行的時(shí)候,它并不會(huì)被加載到 JVM 中。

RetentionPolicy.RUNTIME:注解可以保留到程序運(yùn)行的時(shí)候,它會(huì)被加載進(jìn)入到 JVM 中,所以在程序運(yùn)行時(shí)可以獲取到它們

@Documented

在使用javadoc工具生成幫助文檔的時(shí)候保留其注解信息。也就是引用這個(gè)元注解的注解在javadoc文檔中會(huì)保留自己的注解信息。

@Target

指定了注解可以用于的范圍。有以下取值

ElementType.ANNOTATION_TYPE 可以給一個(gè)注解進(jìn)行注解

ElementType.CONSTRUCTOR 可以給構(gòu)造方法進(jìn)行注解

ElementType.FIELD 可以給屬性進(jìn)行注解

ElementType.LOCAL_VARIABLE 可以給局部變量進(jìn)行注解

ElementType.METHOD 可以給方法進(jìn)行注解

ElementType.PACKAGE 可以給一個(gè)包進(jìn)行注解

ElementType.PARAMETER 可以給一個(gè)方法內(nèi)的參數(shù)進(jìn)行注解

ElementType.TYPE 可以給一個(gè)類(lèi)型進(jìn)行注解,比如類(lèi)、接口、枚舉

@Inherited

繼承。如果一個(gè)超類(lèi)引用該注解,則它的子類(lèi)默認(rèn)擁有這個(gè)超類(lèi)所具有的的注解

@Repeatable

可以理解為引用了@repeatable的注解可以多次引用同一個(gè)注解,多次賦值。

定義

注解通過(guò)@interface關(guān)鍵字來(lái)定義

public  @interface GoodMan {

}

從某種意義上可以講注解是一個(gè)tag。

這里我們可以理解為在這定義了一個(gè)GoodMan的標(biāo)簽。

在這個(gè)注解里我們可以定義GoodMan具有什么屬性。

應(yīng)用

在GoodMan中

public @interface GoodMan {

public String personality();

public String quality() default "selfless";

}

注解只有成員變量(無(wú)形參的方法申明),沒(méi)有方法。上述代碼中定義了quality屬性,并且為它添加了default默認(rèn)值"kindness"。默認(rèn)值不可以為null??梢阅J(rèn)設(shè)置為""空字符串

如果沒(méi)有默認(rèn)值的話,在使用的時(shí)候則需要對(duì)它進(jìn)行賦值。賦值方式是在注解的括號(hào)內(nèi)用value="",多個(gè)屬性則用逗號(hào)隔開(kāi)。如果只有一個(gè)屬性,則可以直接在括號(hào)內(nèi)寫(xiě)上value的值,不需要以value=""的形式。

現(xiàn)在一個(gè)GoodMan的注解就寫(xiě)好了,這個(gè)注解中,我們申明了兩個(gè)屬性:personalityquality。其中給quality一個(gè)默認(rèn)值,所以在接下來(lái)我們應(yīng)用到GoodMan的時(shí)候可以不對(duì)其進(jìn)行定義;

@GoodMan(personality = "selfless")
public class Ironman {
}

Ironman中我們應(yīng)用了注解GoodMan并且對(duì)未設(shè)置默認(rèn)值的personality賦了selfless的值。

在本次的例子中,可以這樣講GoodMan是一個(gè)"標(biāo)簽",我們?cè)?b>Ironman上引用這個(gè)"標(biāo)簽",表示Ironman具備GoodMan這個(gè)標(biāo)簽下的屬性,具備個(gè)人品質(zhì)quality是友好kindness。并且為它定義了personality為selfless。

下面講一下本人理解的注解執(zhí)行的過(guò)程:
1.通過(guò)@interface定義了一個(gè)注解,并在里面添加了我們需要的屬性
2.在我們需要的地方@注解名(屬性值)來(lái)引用我們的注解

但是這兩個(gè)步驟中需要有橋梁,只是單純的應(yīng)用這個(gè)注解,對(duì)于我們的代碼沒(méi)有任何作用。

此時(shí)反射注解處理器就登場(chǎng)了。
反射(Reflect):程序運(yùn)行時(shí)獲取注解的值,@Retention設(shè)置為RUNTIME。則需要在注解中引用@Retention(RetentionPolicy.RUNTIME)
注解處理器(AbstractProcessor):編譯時(shí)獲取注解的值,@Retention的值為CLASS。則需要在注解中引用@Retention(RetentionPolicy.CLASS)

反射
注解需要定義的有運(yùn)行時(shí)間,作用域。而作用域無(wú)論是field,method還是construtor都是有g(shù)etAnnotation來(lái)獲取注解的

TIPS

是否包含注解的代碼對(duì)于java編譯器來(lái)講生成的java虛擬機(jī)指令是相同的。

注解從某種意義上來(lái)講就是根據(jù)所選 處理工具 來(lái)識(shí)別代碼中的注解。

注解是可重復(fù)的,如果注解的編寫(xiě)者將其申明為可重復(fù)的,則可以多次重復(fù)使用一個(gè)注解。

注解的默認(rèn)值不能設(shè)置為null,注解元素永遠(yuǎn)不能為 null。可以使用空字符串"".

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/75544.html

相關(guān)文章

  • IMI 基于 Swoole 開(kāi)發(fā)的協(xié)程 PHP 開(kāi)發(fā)框架 常駐內(nèi)存、協(xié)程異步非阻塞

    摘要:介紹是基于開(kāi)發(fā)的協(xié)程開(kāi)發(fā)框架,擁有常駐內(nèi)存協(xié)程異步非阻塞等優(yōu)點(diǎn)。宇潤(rùn)我在年開(kāi)發(fā)并發(fā)布了第一個(gè)框架,一直維護(hù)使用至今,非常穩(wěn)定,并且有文檔。于是我走上了開(kāi)發(fā)的不歸路 showImg(https://segmentfault.com/img/bVbcxQH?w=340&h=160); 介紹 IMI 是基于 Swoole 開(kāi)發(fā)的協(xié)程 PHP 開(kāi)發(fā)框架,擁有常駐內(nèi)存、協(xié)程異步非阻塞IO等優(yōu)點(diǎn)。...

    airborne007 評(píng)論0 收藏0
  • APT案例之點(diǎn)擊事件

    摘要:楊充一定時(shí)間內(nèi)該點(diǎn)擊事件只能執(zhí)行一次用來(lái)修飾這是一個(gè)什么類(lèi)型的注解。楊充自定義編譯器獲取遍歷,并生成代碼配置文件文件配置的作用是向系統(tǒng)注冊(cè)自定義注解處理器,執(zhí)行編譯時(shí)使用進(jìn)行處理。 目錄介紹 01.創(chuàng)建項(xiàng)目步驟 1.1 項(xiàng)目搭建 1.2 項(xiàng)目功能 02.自定義注解 03.創(chuàng)建Processor 04.compiler配置文件 05.編譯jar 06.如何使用 07.編譯生成代...

    cyixlq 評(píng)論0 收藏0
  • 利用反射和注解,拷貝類(lèi)型相同,屬性名不同的對(duì)象

    摘要:前言最近開(kāi)發(fā)遇到一個(gè)問(wèn)題,兩個(gè)對(duì)象進(jìn)行屬性值拷貝。理論上來(lái)說(shuō)可以直接借助來(lái)進(jìn)行拷貝,奈何兩個(gè)對(duì)象屬性名不同,懵逼臉。 1、前言 最近開(kāi)發(fā)遇到一個(gè)問(wèn)題,兩個(gè)對(duì)象進(jìn)行屬性值拷貝。理論上來(lái)說(shuō)可以直接借助org.springframework.beans.BeanUtils.copyProperties(Object source, Object target)來(lái)進(jìn)行拷貝,奈何兩個(gè)對(duì)象屬性名不...

    forrest23 評(píng)論0 收藏0
  • 基于 java 注解的 csv 文件讀寫(xiě)框架

    摘要:基于注解生成加簽驗(yàn)簽。是否寫(xiě)入頭,建議第一次寫(xiě)入指定,避免中文亂碼指定文件編碼默認(rèn)不進(jìn)行字段排序無(wú)待寫(xiě)入的文件列表方法默認(rèn)值說(shuō)明必填創(chuàng)建實(shí)例,并且指定待讀取文件路徑。 csv 基于 java 注解生成加簽驗(yàn)簽 csv。 開(kāi)源地址: github csv) 創(chuàng)作原由 以前覺(jué)得 csv 文件的多寫(xiě)非常簡(jiǎn)單,就懶得封裝。 最近一個(gè)月寫(xiě)了兩次 csv 文件相關(guān)的東西,發(fā)現(xiàn)要處理的細(xì)節(jié)還是有的,...

    Gemini 評(píng)論0 收藏0
  • 基于 java 注解的 csv 讀寫(xiě)框架更加簡(jiǎn)單靈活

    摘要:創(chuàng)作原由以前覺(jué)得文件的讀寫(xiě)非常簡(jiǎn)單,就懶得封裝。為了解決上述問(wèn)題,此框架應(yīng)運(yùn)而生。寫(xiě)入文件其中列表構(gòu)建構(gòu)建基于注解的測(cè)試列表列表你好生成文件內(nèi)容名稱(chēng)生日你好讀取文件測(cè)試日志信息你好集合類(lèi)有時(shí)候?qū)ο笾袝?huì)包含數(shù)組等常見(jiàn)集合。 CSV 基于 java 注解的 csv 讀寫(xiě)框架。 相關(guān)框架 Apache commons-csv super-csv 簡(jiǎn)單看了下,這兩個(gè)框架提供的特性都非常的基礎(chǔ)。...

    includecmath 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<