我觉得我必须在这里问这个问题,因为我在其他地方找不到正确的答案。
我正在尝试让以下代码片段在 componentList
处工作是 List<Component>
。我知道一些解决方法,例如评论中提到的解决方法 here 。但我只是想知道java中是否有某种表达式来检查 instanceof
没有实例的泛型参数。我知道我也可以使用 class
或某种值作为它的标识符。
public <T extends Component> T getComponent(){
for (Component component:componentList) {
if(component instanceof T){
return component;
}
}
return null;
}
非常感谢您的回答和拼写检查^^
最佳答案
由于类型删除,T
在运行时是未知的,因此您必须传入一个参数来告诉运行时的代码 T
是什么。
public <T extends Component> T getComponent(Class<T> type) {
for (Component component : componentList) {
if (type.isInstance(component)) {
return type.cast(component);
}
}
return null;
}
调用者必须提供如下参数:
Subcomponent x = getComponent(Subcomponent.class);
不幸的是,没有办法解决这个问题。
关于java - 泛型参数的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60627175/