我觉得我不得不在这里问这个问题,因为在其他地方找不到正确的答案。我正在尝试使以下代码片段在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);
不幸的是,没有办法解决。