Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过它获取组件';s泛型_Java_Generics_Search_Components - Fatal编程技术网

Java 通过它获取组件';s泛型

Java 通过它获取组件';s泛型,java,generics,search,components,Java,Generics,Search,Components,我想做的是创建一个方法,允许用户搜索游戏组件列表,找到他们传入的任何类的游戏组件 我完全不知道该怎么做。有什么想法吗 这就是我到目前为止所尝试的。我尝试了很多不同的方法,但是我一直觉得classDude不能被解析为一种类型。提前谢谢 public GameComponent<?> getComponentOfType(Class<Object> classDude) { for(GameComponent<?> gC : mCompo

我想做的是创建一个方法,允许用户搜索游戏组件列表,找到他们传入的任何类的游戏组件

我完全不知道该怎么做。有什么想法吗

这就是我到目前为止所尝试的。我尝试了很多不同的方法,但是我一直觉得classDude不能被解析为一种类型。提前谢谢

public GameComponent<?> getComponentOfType(Class<Object> classDude)
    {

        for(GameComponent<?> gC : mComponentList)
        {
            if(gC instanceof classDude)
            {

            }
        }

    }
公共游戏组件getComponentOfType(类classDude)
{
用于(游戏组件gC:mComponentList)
{
if(classDude的gC实例)
{
}
}
}

听起来你想要:

public <T extends GameComponent<?>> T getComponentOfType(Class<T> classDude)
{
    for(GameComponent<?> gC : components)
    {
        if(classDude.isInstance(gC))
        {
            return classDude.cast(gC);
        }
    }
    return null;
}
publicGetComponentOfType(类classDude)
{
用于(游戏组件gC:components)
{
if(类dude.isInstance(gC))
{
return(GameComponent)classDude.cast(gC);
}
}
返回null;
}

换句话说,您缺少的是和方法。

如果我想让函数本身看起来像这样,我该怎么做:getComponent()@user1159418:你不能——这不是Java中调用泛型方法的方式,你必须提供类,否则类型擦除会影响你。不过您可以使用
getComponent(TextureComponent.class)
。非常感谢您抽出时间!
public GameComponent<?> getComponentOfType(Class<?> classDude)
{
    for(GameComponent<?> gC : components)
    {
        if(classDude.isInstance(gC))
        {
            return (GameComponent<?>) classDude.cast(gC);
        }
    }
    return null;
}