編譯時註解學習一之 Element元素

前面的文章學習java基礎之註解,掌握了註解的基本用法。使用系統或者大神寫的框架庫提供給我們註解,可以省略好多配置,特別是java Spring開發中註解更是多的眼花繚亂。最近需要用到編譯時註解,所以就對AbstractProcessor進行深入的學習,首先對javax.lang.model.element進行學習。

Element 是一個接口,它只在編譯期存在和Type有區別,表示程序的一個元素,可以是package,class,interface,method,成員變量,函數參數,泛型類型等。
它的子類包括ExecutableElement, PackageElement, Parameterizable, QualifiedNameable, TypeElement, TypeParameterElement, VariableElement。

Element的子類介紹:

  • ExecutableElement:表示類或者接口中的方法,構造函數或者初始化器。
  • PackageElement :表示包程序元素
  • TypeELement:表示一個類或者接口元素
  • TypeParameterElement:表示類,接口,方法的泛型類型例如T。
  • VariableElement:表示字段,枚舉常量,方法或者構造函數參數,局部變量,資源變量或者異常參數。

Element只在編譯期可見,通過Element可以獲取什麼信息呢,如何獲取呢。下面是jdk中對Element的說明:
在這裏插入圖片描述
在這裏插入圖片描述
asType() 返回TypeMirror,TypeMirror是元素的類型信息,包括包名,類(或方法,或參數)名/類型。TypeMirror的子類有ArrayType, DeclaredType, DisjunctiveType, ErrorType, ExecutableType, NoType, NullType, PrimitiveType, ReferenceType, TypeVariable, WildcardType ,getKind可以獲取類型。

equals(Object obj) 比較兩個Element利用equals方法。

getAnnotation(Class annotationType) 傳入註解可以獲取該元素上的所有註解。

getAnnotationMirrors() 獲該元素上的註解類型。

getEnclosedElements() 獲取該元素上的直接子元素,類似一個類中有VariableElement。

getEnclosingElement() 獲取該元素的父元素,如果是PackageElement則返回null,如果是TypeElement則返回PackageElement,如果是TypeParameterElement則返回泛型Element

getKind() 返回值爲ElementKind,通過ElementKind可以知道是那種element,具體就是Element的那些子類。

getModifiers() 獲取修飾該元素的訪問修飾符,public,private。

getSimpleName() 獲取元素名,不帶包名,如果是變量,獲取的就是變量名,如果是定義了int age,獲取到的name就是age。如果是TypeElement返回的就是類名。

getQualifiedName():獲取類的全限定名,Element沒有這個方法它的子類有,例如TypeElement,得到的就是類的全類名(包名)。

獲取所在的包名:
Elements.getPackageOf(enclosingElement).asType().toString()

編譯時註解學習一之 Element元素
編譯時註解學習二之 註解處理器初探AbstractProcessor
編譯時註解學習三之 註解處理器AbstractProcessor工具和Element屬性簡述
編譯期註解學習四 簡單的view注入框架
編譯期註解學習五 - ElementKind,TypeKind,不同Element類型判斷
編譯期註解學習六- 生成java文件javapoet
編譯期註解學習七-如何進行調試
編譯時註解學習八 -模板文件讀取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章