java - Java 未经检查强制转换为类型参数警告,尽管它是
问题描述
考虑你有这个列表:
private final List<? extends AbstractXmlElement> inMemoryElements;
它包含一堆 AbstractXmlElement 子类的对象,并且您想要添加一个方法来从该列表中过滤特定子类的对象。为此,我创建了以下方法:
public <E extends AbstractXmlElement> List<E> getInstancesOf(Class<E> c) {
return getUsableElements().stream()
.filter(c::isInstance)
.map(e -> (E) e)
.collect(Collectors.toList());
}
然而 (E) e 导致 UncheckedCast 警告。我想知道这究竟是一个未经检查的强制转换,以及抑制这个警告是否安全,因为那些不是 E 实例的对象在强制转换之前被过滤掉了。这意味着,据我所知,演员阵容永远不应该失败
解决方案
这是一个未经检查的强制转换,因为在运行时类型E
是未知的。由于您正在检查isInstance()
,因此您的代码是安全的。但是如果你想避免警告,你可以使用c
做演员:
.map(c::cast)
推荐阅读
- javascript - 在对象数组上映射时使用解构时如何写我的条件
- amazon-web-services - 为 Lambda 授权方启用预置并发
- node.js - 使用 NODE js,我输入 Terminal npm,它开始向我显示错误。而我解决不了
- java - 如何使用线程上下文跨方法传递对象?
- c# - 在 C# 中使用 JSON 路径动态创建 JSON 对象
- python - 如何使用 Python 中的 sum() 函数来查找列表中所有正数的总和?
- kdb - 在这种情况下,如何在 kdb 中编写正确的查询?
- c++ - 尝试编译此构造函数时出现错误
- maven - Jenkins Travis-CI 构建在 cli 模块中失败(阴影失败)
- amazon-web-services - 为什么在 alb.ingress.kubernetes.io/security-groups 注释中提供的安全组上尝试删除