通用参数实例

问题描述 投票:0回答:1

我觉得我不得不在这里问这个问题,因为在其他地方找不到正确的答案。我正在尝试使以下代码片段在componentListList<Component>的情况下工作。我知道一些解决方法,例如注释here中提到的解决方法。但是我只是想知道Java中是否存在某种表达式来检查泛型参数的instanceof而没有它的实例。我知道我也可以使用class或某种值作为它的标识符。

public <T extends Component> T getComponent(){
        for (Component component:componentList) {
            if(component instanceof T){
                return component;
            }
        }
        return null;
    }

已经感谢您的回答和拼写检查^^

java loops generics instanceof
1个回答
4
投票

由于类型擦除,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);

不幸的是,没有办法解决。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.