📅  最后修改于: 2023-12-03 14:42:12.779000             🧑  作者: Mango
Java 9 引入了一种新的特性,即可选的类改进。这个特性可以让开发者在运行时决定是否使用某些类。
可选的类是指,一些 Java SE 平台的核心类,它们被视为可选的,并不是所有的 Java SE 实现都必须实现它们。这些类通常都是一些已经过时或者在特定情况下才需要使用的类。
在 Java 9 中,这些类被移动到了 jdk.unsupported 模块中,这样就可以在运行时决定是否使用它们。
要在 Java 9 中使用可选的类,首先需要将它们添加到模块路径中。可以通过在命令行中指定 --add-modules jdk.unsupported 来添加它们。例如:
java --add-modules jdk.unsupported <MainClass>
一旦添加成功,就可以在代码中使用可选的类了。例如,如果你需要使用 sun.misc.Unsafe,你可以这样获取它的实例:
public class Main {
public static void main(String[] args) throws Exception {
ClassLoader classLoader = Main.class.getClassLoader();
Class<?> cls = classLoader.loadClass("sun.misc.Unsafe");
Field f = cls.getDeclaredField("theUnsafe");
f.setAccessible(true);
Object theUnsafe = f.get(null);
System.out.println(theUnsafe);
}
}
注意,这个例子中的代码使用了反射机制来获取 sun.misc.Unsafe 的实例。这是因为 sun.misc.Unsafe 并不在 JDK 的标准 API 中,不能直接通过 import 来使用。
尽管可选的类可以在 Java 9 中使用,但是一些可选的类并不是为了在应用程序中使用而设计的。它们通常都是一些在核心 Java SE 平台上使用的类,可能存在一些不稳定性或者接口变更的风险。
因此,建议开发者在使用可选的类时要非常小心。要确保你对可选的类有足够的了解,并且知道如果使用不当会带来什么风险。
此外,根据官方文档,可选的类不会被长期支持。这就意味着它们随时都可能被移除,或者不再被支持。因此,如果你的应用程序需要依赖于可选的类,建议你要有一个备份计划。
Java 9 的可选的类改进是一个强大的特性,可以让开发者在运行时灵活决定是否使用某些类。然而,这个特性并不是为了在应用程序中使用而设计的,因此建议开发者在使用可选的类时要非常小心,确保自己知道存在的风险,并且有备份计划。