Java 枚舉和注解總結(jié)

Java 枚舉和注解總結(jié)

枚舉

沒(méi)有枚舉前我們基本上常量來(lái)定義值:

public interface Color{
    public static final int GREEN = 0;
    public static final int RED   = 1;
    ....
    ....
    ....
} 

如果有了枚舉后我們會(huì)怎樣了?

public enum Color{
    GREEN,RED,BLACk,.......
}

代碼是不是就清晰很多了?而且使用的時(shí)候輸出的值我們是可以使用GREEN,是不是可以很明白的知道是什么顏色?

枚舉的創(chuàng)建

枚舉是繼承自Enum,使用enum關(guān)鍵字。

枚舉的使用場(chǎng)景

枚舉適合在固定的常量下使用,比如四季,月份,星期;這種基本公認(rèn)的而且不會(huì)有改變的場(chǎng)景下使用。

編譯器中的枚舉

編譯器默認(rèn)幫我們實(shí)現(xiàn)了很多枚舉中的方法,比如equals(),hashCode(),toString,values(),valueOf(String)等。這些都是編譯器幫我們做的。

枚舉中的注意事項(xiàng)

  1. 不能使用static,final修飾枚舉,因?yàn)樗请[式的final類型的;
  2. 因?yàn)槭莊inal類型,所以我們也就知道它是不能被繼承的;
  3. 從Enum繼承的clone是final類型的,枚舉是不能重寫clone方法的,并且Enum里面的clone方法直接拋出異常,所以enum是不能被clone的;
  4. enum中的ordinal是強(qiáng)依賴于枚舉實(shí)例的定義順序的,所以用ordinal來(lái)做判斷順序是不推薦的,因?yàn)橹灰诜亲詈蠹尤雽?shí)例,那么就會(huì)改變整體的順序;如果是需要順序可以自定義屬性。

注解

注解出現(xiàn)前

注解的作用我理解為就是用來(lái)約定一些數(shù)據(jù)定義,讓我們可以在某個(gè)屬性或者某個(gè)地方做個(gè)標(biāo)記。在注解出現(xiàn)前能做這個(gè)的應(yīng)該是XML,我們通常在xml中定義類或者屬性的相關(guān)配置。而有了注解我們可以在代碼中直接定義了。

注解的分類

  1. 定義注解的注解,元注解:@Rentation,@Target,@Document,@Inherited
  2. jdk內(nèi)置注解:@Override@Deprecated...
  3. 自定義的注解
  4. spring等外部注解

作用場(chǎng)景:

@Rentation:Source,Class,Runtime

作用目標(biāo)域:

@Target:Construct,F(xiàn)ield,Local_variable,method,package,paramter,type

注解的定義

注解的定義使用@interface關(guān)鍵字,并且使用元注解進(jìn)行標(biāo)注:

@Rentation(Rentation.Runtime)
@Target(ElementType.Field)
public @interface XxAnotation{
    String values() default "";
}

注解屬性

注解里面的屬性只能使用以下6種類型來(lái)定義:

1. 所有的基本類型;
2. String
3. Class
4. enum
5. Annotation
6. 以上類型的數(shù)組類型

注解不允許使用基本類型的包裝類來(lái)定義里面的注解屬性。注解里面的屬性都是使用方法的方式來(lái)定義的。有點(diǎn)類似接口方法。
注解的屬性需要注意一下幾點(diǎn):

  1. 要么具有默認(rèn)值,要么在使用注解的時(shí)候提供屬性的值;
  2. 非基本類型的元素,默認(rèn)值不能為null;
  3. 如果只有一個(gè)屬性,那么可以設(shè)置為value,在使用注解的時(shí)候就可以直接賦值;@XxAnotation("ok")

ps:注解是不能繼承的。

注解處理器

我們定義了注解,設(shè)置了元素值。那么就必須要有一個(gè)處理器來(lái)進(jìn)行注解處理。這個(gè)可以看看之前的Java 特殊字段脫敏,我們可以使用反射來(lái)獲取注解定義的值,然后進(jìn)行業(yè)務(wù)處理。

原文鏈接http://chenzhijun.me/2018/03/22/java-enum-anotation/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對(duì)象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法,并非Fa...
    孫小磊閱讀 2,184評(píng)論 0 3
  • 30、用enum代替int常量 枚舉類型是指由一組固定的常量組成合法值的類型。在java沒(méi)有引入枚舉類型前,表示枚...
    Alent閱讀 798評(píng)論 1 5
  • Java 1.5發(fā)行版本新增了兩個(gè)引用類型家族:枚舉類型(Enumerate類)和注解類型(Annotation接...
    Timorous閱讀 463評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評(píng)論 19 139
  • 本期文藝之星:邛海幽藍(lán),我心依然,魚樂(lè)兒,簡(jiǎn)JN,妍筱伊,Ling一00,靜若幽蓮,雙魚座cy,風(fēng)言無(wú)語(yǔ),暖意人生...
    我心依然_580a閱讀 1,203評(píng)論 31 39

友情鏈接更多精彩內(nèi)容