javapoet 是square产的生成 java的利器。
但添加的类型其实是不对类型进行校验的。会做些简单的校验。但不全
MethodSpec main= MethodSpec.methodBuilder("main") .addModifiers(Modifier.PUBLIC,Modifier.STATIC) //tag1 .returns(void.class) .addParameter(String[].class,"args") .addStatement("$T.out.println($S)",System.class,"Hello ,java Poet!") .build(); TypeSpec helloWorld=TypeSpec.classBuilder("HelloWorld") .addModifiers(Modifier.PUBLIC,Modifier.FINAL) .addMethod(main) .build(); JavaFile javaFile=JavaFile.builder("com.test",helloWorld).build(); javaFile.writeTo(System.out);
最终生成的java文件:
package com.test;
import java.lang.String;
import java.lang.System;
public final class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello ,java Poet!");
}
}
但如果 .addModifiers(Modifier.PUBLIC,Modifier.STATIC) //tag1 这里修改为
.addModifiers(Modifier.PUBLIC,Modifier.STATIC,Modifier.PRIVATE,Modifier.PROTECTED)
package com.test;
import java.lang.String;
import java.lang.System;
public final class HelloWorld {
public protected private static void main(String[] args) {
System.out.println("Hello ,java Poet!");
}
}
===========================================================================================
在最后调用 JavaFile javaFile=JavaFile.builder("com.test",helloWorld).build();
这个时候 会把import 相关全部写到类最上面,而不是
public final class HelloWorld {
java.util.Date getToday() {
return new java.util.Date();
}
}
变成
package com.example.helloworld;
import java.util.Date;
public final class HelloWorld {
Date getToday() {
return new Date();
}
}
会自动把对象给放到import 里。
其实最好的教程来源于官网
https://github.com/square/javapoet