我想知道是否有一个Java API可以告诉你当前平台上是否有特定的语言功能(例如"钻石"操作符).
(换句话说,我正在尝试做的是类似于JavaScript中的"浏览器嗅探".)
这在元编程中非常方便(编写生成Java源代码的Java程序).
到目前为止,我发现的最佳解决方案是解析System.getProperty("java.specification.version")并检查它是否是引入此功能的版本,但我并不是100%确定此属性在所有JVM中都可用(或者甚至是否符合相同的语法在所有JVM中).这种方法的另一个小麻烦是你必须采取额外的步骤来查找哪个版本的Java引入了你感兴趣的语言功能.这不是什么大不了的事,因为这个信息很容易google,但理想情况下它会如果有一个可以轻松提供信息的API,那就太好了,例如:
code.append("Map<Integer, String> map = ");
if (javax.meta.JavaVersion.getCurrentVersion().supportsDiamond()) {
code.append("new Map<>();");
} else {
code.append("new Map<Integer, String>();");
}
Run Code Online (Sandbox Code Playgroud)
显然没有命名的软件包javax.meta,但我想知道是否已经有一个现有的解决方案来解决这个问题比解析"java.specification.version"属性更清晰.
更新:我刚刚意识到它Package#getSpecificationVersion()也提供了相同的值,System.getProperty("java.specification.version")但可能更可靠,因为系统属性是可变的.换句话说,获取Java规范版本的最佳方法可能是调用Package#getSpecificationVersion()任何"内置"包.例如:String.class.getPackage().getSpecificationVersion()
java ×1