Java SE 6新特性: 编译器 API

http://tech.ddvip.com   2007年08月11日    社区交流

内容摘要:本文是其中的第四篇,介绍了 JDK 6 中为在运行时操纵编译器所增加的编译器 API(JSR 199)。您将了解到,利用此 API 开发人员可以在运行时调用 Java 编译器,还可以编译非文本形式的 Java 源代码,最后还能够采集编译器的诊断信息。

  在 17 行,构造了一个 DiagnosticCollector 对象,这个对象由 JDK 提供,它实现了 DiagnosticListener 接口。18 行将它注册到 CompilationTask 中去。一个编译过程可能有多个诊断信息。每一个诊断信息,被抽象为一个 Diagnostic。20-26 行,将所有的诊断信息逐个输出。编译并运行 Compiler,得到以下输出:

  清单 6. DiagnosticCollector 收集的编译信息

Line Number->5
Message->math/Calculator.java:5: ';' expected
Source->compiler.err.expected

  实际上,也可以由用户自己定制。清单 7 给出了一个定制的 Listener。

  清单 7. 自定义的 DiagnosticListener

01 class ADiagnosticListener implements DiagnosticListener<JavaFileObject>{
02    public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
03    System.out.println("Line Number->" + diagnostic.getLineNumber());
04    System.out.println("Message->"+ diagnostic.getMessage(Locale.ENGLISH));
05    System.out.println("Source" + diagnostic.getCode());
06    System.out.println("
");
07   }
08 }

  总结

  JDK 6 的编译器新特性,使得开发者可以更自如的控制编译的过程,这给了工具开发者更加灵活的自由度。通过 API 的调用完成编译操作的特性,使得开发者可以更方便、高效地将编译变为软件系统运行时的服务。而编译更广泛形式的源代码,则为整合更多的数据源及功能提供了强大的支持。相信随着 JDK 的不断完善,更多的工具将具有 API 支持,我们拭目以待。

来源:ibm    作者:沈 羽    责编:豆豆技术应用

正在加载评论...