如果你简单,这个世界就对你简单。
官方说明JavaPoet is a Java API for generating .java source files.
原由是看到了butterknife框架,里面用的是RetentionPolicy.CLASS,编译的时候通过注解实现框架的功能,比RetentionPolicy.RUNNTIME再通过反射实现效率高。
然后就去看RetentionPolicy.CLASS的实现原理,需要注解处理器(Annotation Processor),最后就一步步的看到了javapoet,自动生成java代码。
扯远了,直接记录过程吧。
一.过程搭建:
我是通过eclipse maven自动下载jar的。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public static void main(String[] args) throws IOException {
MethodSpec main = MethodSpec
.methodBuilder("main")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(void.class)
.addParameter(String[].class, "args")
.addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!").build();
TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
.addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(main)
.build();
JavaFile javaFile = JavaFile.builder("com.zlc.javapoet",
helloWorld).build();
// 写入src目录下面
String path = System.getProperty("user.dir") + "/src";
javaFile.writeTo(new File(path));
}
开始运行,出现了Unsupported major.minor version 51.0错误,网上查了下是jdk版本不一致啥的。我看了下我eclpse引用的jre是mac系统自带的,改成了下载jdk,错误搞定。
运行成功,刷新下,会看到自动生成的HelloWorld.java类。
一.更多用法:
1 | MethodSpec main = MethodSpec.methodBuilder("main") |
还有很多功能,参照官方用法,用到的时候再去看吧。
github地址