Java 11 添加了很多新的特性,也修复了一些创建的 bug。例如 Java 10 中引进的 List.copyOf()
方法
这个 bug 是什么呢 ?
当 List.copyOf()
的参数是某个列表的子列表时,该方法的返回值不能被序列化
List.copyOf()
我们先做一些初始化工作
jshell> var list1 = List.of("苹果","香蕉","菠萝") list1 ==> [苹果, 香蕉, 菠萝] jshell> var list2 = list1.subList(1,2) list2 ==> [香蕉] jshell> var list3=List.copyOf(list2) list3 ==> [香蕉]
JDK11ea19
Java 10 中引进了 copyOf()
方法,但是当参数是某个列表的子列表时,该方法的返回值不能被序列化
jshell> list2==list3 $25 ==> true jshell> new ObjectOutputStream(OutputStream.nullOutputStream()).writeObject(list3) | Exception java.io.NotSerializableException: java.util.ImmutableCollections$SubList | at ObjectOutputStream.writeObject0 (ObjectOutputStream.java:1185) | at ObjectOutputStream.writeObject (ObjectOutputStream.java:349) | at (#14:1)
JDK11ea20
Java 11 在 JDK11ea20
版本中修复了此 bug
jshell> list2==list3 $26 ==> false jshell> new ObjectOutputStream(OutputStream.nullOutputStream()).writeObject(list3) jshell>
结束语
其实我想说的是,这个 bug 对于大多数人来说,是无感知的,因为,等你可以用 Java 10 的时候,你估计不直接上最新的版本
目前尚无回复