如何解决在java代码中,我如何检查jdk版本以在java代码下编译?
// monitor.freeMemory = bean.getFreeMemorySize();//jdk 15
// monitor.maxMemory = bean.getTotalMemorySize();
// monitor.systemloadAverage = bean.getcpuLoad();
monitor.freeMemory = bean.getFreePhysicalMemorySize();//jdk 13
monitor.freeMemory = bean.getTotalPhysicalMemorySize();
monitor.systemloadAverage = bean.getSystemcpuLoad();
我想不加注释地使用上面的代码
解决方法
Java 没有条件编译,因此必须进行一些变通。一种方法是制作这样的界面:
interface monitor {
public void getFree();
public void getTotal();
public void getCpu();
}
此接口的实现应根据JVM 版本使用反射调用适当的方法。像这样(概念上):
public void getFree() {
if (System.getProperty("java.version").equals(JDK_15_VERSION)) {
Class myclass = Class.forName("my.class.JDK_15_NAME");
Object myobject = myclass.newInstance();
Method method = myclass.getDeclaredMethod("FREE_MEM_JDK_15_METHOD",null);
method.invoke(obj,null);
}
else {
Class myclass = Class.forName("my.class.JDK_13_NAME");
Object myobject = myclass.newInstance();
Method method = myclass.getDeclaredMethod("FREE_MEM_JDK_13_METHOD",null);
}
}
,
直到现在这是不可能的。至少不是您想到的东西,例如干净的 If/else
条件。如果我们破解得足够深,我们就可以实现它,尽管以一种非常肮脏的方式。
这就是方法被弃用的原因。他们不会把东西扔出窗外,因此必须用另一种方法编译项目。它们为那些已弃用的方法提供了足够的时间,以便您可以安全地前进。
你的问题也是如此。您的项目可以使用相同的代码通过 JDK 13 或 JDK 15 进行编译。
com.sun.management.OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
bean.getFreePhysicalMemorySize();
bean.getTotalPhysicalMemorySize();
bean.getSystemCpuLoad();
此代码将能够从 JDK 11 到所有新版本的 JDK 进行编译和运行。但是,如果您切换到 JDK 14,您将收到已弃用的警告。
考虑到 JDK 11 是 LTS 版本,他们无法将方法抛出窗口。它们很可能也适用于下一个 LTS 版本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。