java 提供四种基础的注解 ( 元注解):
@Target 用于什么地方。
1 : ElementType.ANNOTATUON_TYPE 给注解进行注解。
2 : ElementType.FIELD : 属性注解
3 :ElementType.METHOD : 给方法进行注解。
4 :ElementType.TYPE : 可以给一个类型注解,比如类,接口,枚举。
@Retention 在什么级别保留改信息。
1 : SOURCE : 注解将被编译器丢弃。编译完成什么也不会留下,类似:@Override, @SuppressWarnings 作用: 代码错误提示等。
2 : CLASS : 注解在class文件中可以用,在类加载的时候被丢弃。默认方式。作用: 生成java文件。
3 : RUNTIME : Vm在运行期间保留注解,因此可以用反射机制读取注解信息,代码提取等。
@Document 将注解包含在javadoc中。
@Inherited 允许子类继承父类中的注解。
创建注解
1 使用@interface
Element是一个接口,表示程序的一个元素,可以是package,class,interface,method, 成员变量,函数参数,泛型种类等。
1 : ExecutableElement : 表示类或者接口中的方法,构造函数或者初始化器。
2 : PackageElement : 表示包程序元素。
3 :TypeElement : 表示一个类或者接口元素。
4 :TypeParameterElement : 表示类,接口,方法的泛型类型 如T元素
5 :VariableElement : 成员变量,(方法,局部变量) 元素
ElementKind = Element.getKind() 元素本身的类型
1. Package 包类型
2 . Enum 枚举类型
3 . class 类
4 . Field :成员类型
5 . Method : 方法类型。
6 . Interface : 接口类型
TypeMirror = Element.asType(): 元素的类型信息。 包括包名类型, 类的类型。 参数的类型。
1. DeclaredType : 类和接口的类型信息。
2.ExecutableType : 方法类型
3.RefrerenceType : 引用类型。
4.WildCardType : 通配符类型。
5 : ArrayType : 数组类型
TypeKind = TyeMirror.getKind() 类型的属性
1 :Int / Boolean / Long
2 : Package 包
3 :Declared : 类和接口类型
4 :Executable : 方法,构造函数。
5 : Typevar : 变量类型
重要方法
1:types.isSubType(typemirror, typeActivity) 第一个是否是第二个的子类。
2 :type.siSameType(typeMirror,typeActivity) 2个类型是相同的。
3 :isAssignAble(typeMirror,typemirror2) 判断1是2的类型或者父类型。
4 : getAnnotation(class AnnotationType) 获取元素上的注解。
5 : getAnnotationMirrors() 获取元素上的注解类型。
6 :getEnclosedElements() 获取元素内部的子元素。如 VariableElement
7 : getEnclosingElement() 获取元素的父元素.
variableElement -> TypeElement -> packageElement
8 : getSimpaleName() 变量名,方法名,类名。
9 : getQualifiedName() 获取类的全限定名。
10 Elements.getPackageOf(element.asType.tostring) 获取element包名。
javapoet
1 : TypeSpec : 用于生成类,接口,枚举对象的类。
2 :MethodSpec : 用于生成方法对象的类。
3 :parameterSpec : 用于生成参数对象的类。
4 : ParameterSpec : 用于生成参数对象的类 。
5 : fieldSpec : 用于配置生成成员变量的类。
6 : FieldSpec : 用于配置生成成员变量的类。
7 : className : 通过包名和类名生成对象。 知道某个class.
方法体
1: addcode(Strng format, object ..args)
addCode 和 addStatement : addstate会添加 ;
2 : $T : 表示class
$N : 变量名,方法名
$S : 字符串。
$L : 常量。
注解调试
1 : edit configurations -> remote
2 : 复制 agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
3 :as右侧task找到compileDebugJavaWithJavac 任务,右键create
4 : 粘贴并修改 刚复制的 修改suspend= n为suspend=y.
5 : 注意调试前,clean project 或者修改code后调试。
网友评论