泛型参数实例
Instanceof a generic parameter
我觉得我必须在这里问这个问题,因为我在其他地方找不到合适的答案。
我试图让下面的代码片段在 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);
不幸的是,没有办法解决这个问题。
我觉得我必须在这里问这个问题,因为我在其他地方找不到合适的答案。
我试图让下面的代码片段在 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);
不幸的是,没有办法解决这个问题。