gpt4 book ai didi

尽管是实例,但 Java 未经检查强制转换为类型参数警告

转载 作者:行者123 更新时间:2023-11-29 08:27:17 26 4
gpt4 key购买 nike

假设你有这个列表:

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());
}

Yet (E) e 导致 UncheckedCast 警告。我想知道这究竟是一个未经检查的类型转换,以及是否可以安全地抑制此警告,因为那些不是 E 实例的对象在类型转换之前被过滤掉了。这意味着,据我所知,转换永远不会失败

最佳答案

这是一个未经检查的转换,因为 E 的类型是 unknown at runtime .由于您正在检查 isInstance(),因此您的代码是安全的。但是如果你想避免这个警告,你可以使用 c 来做转换:

.map(c::cast)

关于尽管是实例,但 Java 未经检查强制转换为类型参数警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51600686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com