gpt4 book ai didi

java - 为什么这是一个未经检查的类型转换?以及如何解决?

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:37 24 4
gpt4 key购买 nike

我有以下代码:

public final <T extends Component> T getComponent(Class<T> type) {
Iterator<Component> it = components.iterator();

while(it.hasNext()) {
Component next = it.next();

if(type.isAssignableFrom(next.getClass()))
return (T)next; // Why is this an unchecked cast from Component to T?
}

return null;
}

出于某种原因,return (T)next; 是从 Component 到 T 的未经检查的转换。

我不确定这是为什么,因为 T 必须扩展 Component,它应该能够安全地将它转换为 Component 的任何子类,对吧?

如果我手动执行 return (TestComponent)next; 并将返回类型更改为 TestComponent 它工作正常,那么为什么它不能与 T 一起工作?

最佳答案

其他人已经描述了这个问题,这里是更清洁测试的解决方案:

if (type.isInstance(next)) {
return type.cast(next);
}

关于java - 为什么这是一个未经检查的类型转换?以及如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921833/

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