泛型参数实例

Instanceof a generic parameter

我觉得我必须在这里问这个问题,因为我在其他地方找不到合适的答案。 我试图让下面的代码片段在 componentListList<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);

不幸的是,没有办法解决这个问题。