相关疑难解决方法(0)

是否可以通过编程方式确定当前平台上可用的Java语言功能?

我想知道是否有一个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

9
推荐指数
1
解决办法
184
查看次数

热代码交换的工作原理

我一直在使用Java编程,我非常喜欢Netbeans和其他IDE中的功能,它允许您在调试时对程序进行更改,而无需重新启动它.我正在用Java编写一个应用程序,如果我可以动态更新它而不必重新启动它将会受益.我有一个想法,我可以在更新后运行第二个jar,它可以做与IDE相同的事情,但我不知道他们如何交换代码.任何人都可以开导我吗?谢谢!

java

5
推荐指数
1
解决办法
234
查看次数

从字节码解析类名

是否有可能从类源代码中形成的字节码中挖掘出类名?

情况是这样的:我从某个地方远程获取一个类字节码,它来自何处无关紧要.要使用类加载器有效地加载该类,我还需要拥有类名...对吗?

java reflection bytecode

2
推荐指数
1
解决办法
1766
查看次数

标签 统计

java ×3

bytecode ×1

reflection ×1