JDK8或以下版本中JDK9 +中java.util.SubList类的等效类

时间:2019-05-15 08:29:15

标签: java

如果我们使用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

我想克隆项目并自己解决问题,方法是在JDK9中找到等效的java.util.SubList。那就是我需要帮助的地方。

2 个答案:

答案 0 :(得分:1)

@Thilo在评论中说,该类是程序包的私有类,它不是接口的一部分,因此不应由外部用户使用。

这就是为什么您不应该生成依赖它的代码的原因,因为它可能会在没有任何通知的情况下被软件包删除(就像JDK9中发生的那样)。

您应该只使用公共LinkedListArrayList或类似名称。

答案 1 :(得分:-1)

您可以尝试类似的操作:

Class c = Class.forName("java.util.List");

然后使用c.subList();