19.Java 註解

來源:互聯網
上載者:User

標籤:etc   類型   編譯   警告   tde   doc   warnings   present   not   

19.Java註解1.Java內建註解----註解代碼

@Deprecated                                    //不推薦使用的過時方法

@Deprecatedpublic void badMethod(){    System.out.println("I am a old function");}

@Override                                        //必須是覆蓋父類(介面)的函數

@Overridepublic String toString(){      return "override toString()";}

@SuppressWarnings                          //關閉不恰當的編譯期間警告

2.自訂註解

a.沒有任何元素的註解---標記註解

b.普通註解定義、普通註解的使用

/** * 是否是類 */public @interface IsClass {    String value();    boolean isClass() default true;}

 解釋:該註解有兩個元素value和isClass,isClass元素的目的是標記對象是否為類,該元素預設為真。

          當註解的元素都有預設值的時候,名為value的元素賦值時不用寫名稱

3.元註解 
  • @Target---------------用於描述註解的使用範圍
      • eg:TYPE:用於描述類、介面(包括註解類型) 或enum聲明
  • @Retention-----------用於描述註解的生命週期
      • SOURCE:在源檔案中有效(即源檔案保留)---編譯時間起作用
      • RUNTIME:在運行時有效(即運行時保留)----運行時起作用
      • CLASS:在class檔案中有效(即class保留)[預設]
  • @Documented————被修飾的註解會被寫到javadoc中(標記註解)
  • @Inherited------允許子類繼承父類中的註解[註解自身時不可繼承的]可以使用getAnnotations()反射擷取父類被
  • @Target(ElementType.TYPE)@Documented@Inherited@Retention(RetentionPolicy.RUNTIME)public @interface IsClass {    String value();    boolean isClass() default true;}

說明:元註解是用來修飾註解的註解,限定了註解的注釋範圍,註解的生命週期【源碼級,運行時層級,Class檔案級】,是否可以繼承,是否建立文檔等

4.運行時註解

像Spring一類的註解都與運行時註解有很大的關係,下面是一個利用註解,擷取二維表的表名稱,表的行名稱,表的列值三個屬性

4.1定義運行時註解
  • Table是二維表的表格名稱
  • Column是二維表的列
  • Key是二維表的行
import java.lang.annotation.*;/** * Created by yangyun on 2016/12/27. */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Column {    String value();}@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@interface Key{    String value();}@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@interface Table {    String value();//表格的名稱}
 4.2使用註解並編寫相關的註解資訊擷取類
  • Tables類中包含了我們所需要的資訊,Table註解註解在Table類上,Key和Column註解在Field上
  • GetInformation類是擷取相關的註解資訊的操作類,利用的是Java的反射機制
import java.util.List;/** * Created by yangyun on 2016/12/27. */@Empty(field = "Not Empty")@IsClass("value屬性的值")public class Annotation {    public static void main(String[] args) {        System.out.format("tableName:%s\n",GetInformation.getName(Tables.class));        try {            System.out.format("key:%s\n",GetInformation.getKey(Tables.class));        } catch (NoSuchFieldException e) {            e.printStackTrace();        }        System.out.format("columns:%s\n",GetInformation.getCols(Tables.class));    }}@Table("students")class GetInformation{    public static String getName(Class<Tables> tablesClass){        String strTableName=null;        if(tablesClass.isAnnotationPresent(Table.class)){            Table tableName=tablesClass.getAnnotation(Table.class);//表格名稱            strTableName=tableName.value();        }        return strTableName;    }    public static String getKey(Class<Tables> tablesClass) throws NoSuchFieldException {        Field field=tablesClass.getDeclaredField("key");//擷取private屬性        String strKey=null;        if(field!=null){            Key key=field.getAnnotation(Key.class);            if(key!=null){                strKey=key.value();            }        }        return strKey;    }    public static List<String> getCols(Class<Tables> tablesClass){        List<String> columns=new ArrayList<String>();        Field[] fields=tablesClass.getDeclaredFields();        if(fields!=null) {            for (Field field : fields) {                if (field.isAnnotationPresent(Column.class)) {                    columns.add(field.getAnnotation(Column.class).value());                }            }        }        return columns;    }}@Table("Students")class Tables{    @Key("Id")    private String key;    @Column("name")    private String col1;    @Column("sex")    private String col2;}

 4.3 主要的API介紹(不細說屬於反射的知識)

  • 1.myClass.getAnnotations()---擷取該類所有的註解 
  • 2.myClass.getAnnotation(Class annotationType)—擷取特定註解類型
  • 3.myClass.isAnnotationPresent(Class annotationType)—判斷是否存在特定類型的註解
  • 4.myClass.getDeclareAnnotations()— 擷取該類的所有註解不包括從父類中繼承的註解

 

19.Java 註解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.