如果我们使用JDK8或更低版本,则在rt.jar中定义了一个名为java.uti.SubList
的类。
以下代码在JDK8或更低版本中可以正常工作:
Class c = Class.forName("java.util.SubList");
现在我已经迁移到JDK9和更高版本,我无法执行相同的代码。它的抛出ClassNotFoundException
。任何人都知道此修复程序吗?我尝试添加java.se模块,但没有用。
我尝试添加JDK9的各种模块,但是没有用。
Class c = Class.forName("java.util.SubList");
我希望该代码在JDK9 +中成功运行。
我问这个问题的原因是,我在Java项目中使用了kryo-serializers库(https://github.com/magro/kryo-serializers)。
这些人已经使用了这个“ java.util.SubList”类。 https://github.com/magro/kryo-serializers/blob/master/src/main/java/de/javakaffee/kryoserializers/SubListSerializers.java#L267这个项目在JDK9中被打破。我已要求他们调查,但没有回应。 https://github.com/magro/kryo-serializers/issues/112
答案 0 :(得分:1)
@Thilo在评论中说,该类是程序包的私有类,它不是接口的一部分,因此不应由外部用户使用。
这就是为什么您不应该生成依赖它的代码的原因,因为它可能会在没有任何通知的情况下被软件包删除(就像JDK9中发生的那样)。
您应该只使用公共LinkedList
,ArrayList
或类似名称。
答案 1 :(得分:-1)
您可以尝试类似的操作:
Class c = Class.forName("java.util.List");
然后使用c.subList();