javapoet用于在编译时构建生成的java文件。首先看一下javapoet所在包:
首先回顾一下.java文件都有哪些内容:
javapoet的使用都是围绕这些元素来的,上面的类和方法,从.java文件的角度去考虑很好理解,就不去多说了。下面重点说一下Statement中的类型占位符的使用:
我们先来看看 statement 占位符在哪里使用: MethodSpec.methodBuilder(“method”)
.addStatement("$T file", File.class) // File file;
.addStatement("$L = null", "file") // file = null;
.addStatement("file = new File($S)", "foo/bar") // file = new File("foo/bar");
.build();
$T :是类型替换, 一般用于 ("$T foo", List.class) => List foo。$T 的好处在于 JavaPoet 会自动帮你补全文件开头的 import. 如果直接写 (“List foo”) 虽然也能生成 List foo, 但是最终的 java 文件就不会自动帮你添加 import java.util.List;
$L :是字面量替换, 比如 (“abc$L123”, “FOO”) => abcFOO123. 也就是直接替换;
$S : 是字符串替换, 比如: ("$S.length()", “foo”) => “foo”.length()
注意 $S 是将参数替换为了一个带双引号的字符串. 免去了手写 “\“foo\”.length()” 中转义 (\") 的麻烦;
$N :是名称替换, 比如你之前定义了一个函数 MethodSpec methodSpec = MethodSpec.methodBuilder(“foo”).build(); 现在你可以通过 $N 获取这个函数的名称 ("$N", methodSpec) => foo.
下面提供一张万能图,使用不清楚时方便查找: