[Java 11] Java 11 bug 修复 - List 的 copyOf() 方法

yufei       6 年, 3 月 前       598

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 的时候,你估计不直接上最新的版本

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.