Java2的一个新特性是可以在运行时给出包的版本信息。换言之,你可能有一个应用程序加载一个类而且你想知道那个类包实现的是哪个java规范的版本(例如1.1或者1.2)
要看看如何工作,看看下面的在命令行加载指定类的范例:
public class loadclass { public static void main(String args[]) { // check argument if (args.length != 1) { System.err.println("missing classname"); System.exit(1); } // load class Class c = null; try { c = Class.forName(args[0]); } catch (ClassNotFoundException e) { System.err.println(e); System.exit(1); } // retrieve and check package information Package pkg = c.getPackage(); if (pkg == null) { System.out.println("No version information"); } else { System.out.println(pkg); if (pkg.isCompatibleWith("1.2")) System.out.println("Compatible with 1.2"); } } }
假如你输入如下的内容运行这个程序:
$ java loadclass java.util.Vector
输出是:
package java.util, Java Platform API Specification,
version 1.2.0
Compatible with 1.2
(译者注:根据你的运行环境结果有所不同)
在这个例子中,包java.util的规范版本是1.2.0(也就是Java 2)并且和1.2兼容。"兼容"意味着包的版本至少要和isCompatibleWith方法调用中指定的版本相同。假如你想加载特定版本的类,你可以在你的应用程序中使用这样的检查。注重在同一个包中的所有类具有同一个Package对象因此有相同的版本信息。
版本信息是类加载器获得的,通常是从jar文件的manifest文件中得到。那个信息也可能不存在,在那种情况下getPackage返回null。
你可以使用方法Package.getPackages()得到类加载器中的所有包。
你也看看Tech Tips No. 17 (December 15, 1998),它描述了javac的-target选项,你可以使用这个选项产生针对特定版本的JVM的.class文件。