栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

.forEach和.sort不起作用,无法在块中设置断点

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.forEach和.sort不起作用,无法在块中设置断点

此问题的根本原因是在

IndirectList
Eclipselink
JPA类中使用了错误的实现模式。(doc,source)在2.5版本家族中会发生此问题;它也可能在其他版本中出现。

问题在于,此类既是 子类

Vector
又具有
Vector
实例
引用。它尝试通过覆盖的所有方法来将所有方法调用委托给该实例
Vector
。只要没有添加新方法,此方法就可以正常工作
Vector

这发生在Java 8中。

Java的8增加了几个新 的默认方式

Collection
Iterable
List
接口,包括:

  • forEach
  • parallelStream
  • removeIf
  • replaceAll
  • sort
  • spliterator
  • stream

通常,添加默认方法是安全的,因为必须根据其他现有方法来实现它们。但是,出于效率考虑,实现类覆盖默认方法通常是一个好主意。Java 8

Vector
实现添加了这些默认方法的多个替代。如果您有实际
Vector
类的实例,则这些方法可以正常工作。本
IndirectList
类不重写这些方法,所以代表团路径,它试图建立不起作用了这些方法。而是使用普通的
Vector
实现。不幸的是,这些
IndirectList
方法不能使超类状态保持最新,因此
Vector
这些方法的实现都表现为好像
Vector
是空的。

Vector
覆盖
forEach
removeIf
replaceAll
sort
,和
spliterator
。在
parallelStream
stream
默认的方法是在以下方面实现的
spliterator
,于是同样的事情发生在他们身上。本质上,如果在
IndirectList
从Eclipselink
JPA检索的实现中使用集合上的新默认方法,则这些新方法都不起作用。

请注意,也会出现此问题

Collections.sort(indirectList)
。此方法仅调用该
indirectList.sort()
方法,因此遇到与上述完全相同的问题。

有关Eclipselink状态的更多信息,请参阅Eclipselink
JPA错误433075和446236。

有关此实现模式的陷阱的更多信息,请参见Joshua Bloch的书《 Effective Java,第二版第16项:继承而不是继承》。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497308.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号