Gil*_*ili 5 java compiler-construction
我想了解JavaCompiler.getTask()。除了倒数第二个参数,我了解所有参数classes。Javadoc内容如下:
类名(用于注释处理),null表示没有类名
但我不明白他们的意思。我在网上找到了很多引用JavaCompiler的网站,但是没有一个网站解释此参数。有任何想法吗?
我相信当您想在二进制文件上运行注释处理器时可以使用它。这些类将是您要处理的类型。
演示代码:
public class MyProcessor extends AbstractProcessor {
public static @interface X { String value(); }
@X("Hello") public static class Y {}
@Override public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
for (Element element : roundEnv.getRootElements()) {
X x = element.getAnnotation(X.class);
if (x != null) System.out.println(x.value());
}
return true;
}
@Override public Set<String> getSupportedAnnotationTypes() {
return new HashSet<String>(Arrays.asList(X.class.getCanonicalName()));
}
@Override public SourceVersion getSupportedSourceVersion() {
return SourceVersion.RELEASE_6;
}
public static void main(String[] args) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
List<String> classes = Arrays.asList(Y.class.getCanonicalName());
List<String> options = Arrays.asList("-processor", MyProcessor.class
.getCanonicalName());
CompilationTask task = compiler.getTask(null, null, null, options, classes,
null);
task.call();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印出来"Hello"。
| 归档时间: |
|
| 查看次数: |
850 次 |
| 最近记录: |