1. google提供了一个注册处理器的库:用于生产meta-inf信息
compile 'com.google.auto.service:auto-service:1.0-rc2'
一个注解搞定:
AutoService(Processor.class)
public class MyProcessor extends AbstractProcessor {
...
}
2. 项目结构:
----bindview-annotation(Java Library)
----bindview-api(Android Library)
----bindview-compiler(Java Library)
----app(Android App)
bindview-annotation 注解声明
bindview-api 调用Android SDK API
bindview-compiler 注解处理器相关
app 测试App
3. Element概念
package com.example; // 包PackageElement
public class MyClass { // 类TypeElement
private int a; // 变量VariableElement
private Foo other; // 变量VariableElement
public Foo () {} // 方法ExecuteableElement
public void setA ( // ExecuteableElement
int newA // TypeElement
) {
}
}
4.getname方法的区别:
总结:getName()和getCanonicalName()只有数组和内部类的表现不一样。
详细参考
以下顺序为:
getName()
getCanonicalName()
getSimpleName()
******************************** 普通类 ****************************************
com.ershuai.stu.other.TestClass
com.ershuai.stu.other.TestClass
TestClass
******************************** 普通类 List ****************************************
java.util.ArrayList
java.util.ArrayList
ArrayList
******************************* Integer.class *****************************************
java.lang.Integer
java.lang.Integer
Integer
******************************** int .class ****************************************
int
int
int
******************************** 普通类 array - 有区别 ****************************************
[Lcom.ershuai.stu.other.TestClass;
com.ershuai.stu.other.TestClass[]
TestClass[]
******************************** 内部类 - 有区别 ****************************************
com.ershuai.stu.other.Test0$NTestClass
com.ershuai.stu.other.Test0.NTestClass
NTestClass
Javapoet生成代码
占位符的使用
$L 啥也能占
$S for Strings
$T for Types
$N for Names(我们自己生成的方法名或者变量名等等)
这里的$T,在生成的源代码里面,也会自动导入你的类。
静态倒入
JavaFile.builder("com.example.helloworld", hello)
.addStaticImport(hoverboard, "createNimbus")
.addStaticImport(namedBoards, "*")
.addStaticImport(Collections.class, "*")
.build();
那么我们生成的类就会出现这些代码:
import static com.mattel.Hoverboard.Boards.*;
import static com.mattel.Hoverboard.createNimbus;
import static java.util.Collections.*;
网友评论