Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 在方法中使用泛型:编译中的异常:抱怨类型:无法转换为_Java_Generics - Fatal编程技术网

Java 在方法中使用泛型:编译中的异常:抱怨类型:无法转换为

Java 在方法中使用泛型:编译中的异常:抱怨类型:无法转换为,java,generics,Java,Generics,下面的代码在“return list;”中抛出一个类型不匹配的异常。幸亏没有 public class Teste { public <S extends TestPai> S getList(){ TestPai list = new TesteFilho(); return list; } } class TesteFilho implements TestPai{ } interface TestPai{ } 公共类

下面的代码在“return list;”中抛出一个类型不匹配的异常。幸亏没有

public class Teste {

    public <S extends TestPai> S getList(){
        TestPai list = new TesteFilho();
        return  list;
    }
}

class TesteFilho implements TestPai{

}

interface TestPai{

}
公共类测试{
公共的getList(){
TestPai list=newtestefilho();
退货清单;
}
}
类TesteFilho实现TestPai{
}
接口测试{
}
我找到了一个解决办法,像这样说

public class Teste {
@SuppressWarnings("unchecked")
    public <S extends TestPai> S getList(){
        TestPai list = new TesteFilho();
        return  (S)list;
    }
}

class TesteFilho implements TestPai{

}

interface TestPai{

}
公共类测试{
@抑制警告(“未选中”)
公共的getList(){
TestPai list=newtestefilho();
申报表;
}
}
类TesteFilho实现TestPai{
}
接口测试{
}
但这听起来很奇怪,因为我有其他代码在之前编译过的地方没有这样的表现。 -我在windows机器上使用EclipseIDE,执行环境为jre1.7.051

是否有人能帮助它按预期工作(在第一段代码中)


提前感谢。

所有类型都已修复!您根本没有使用类型参数。所以最简单的方法就是

public TestPai getList(){
    TestPai list = new TesteFilho();
    return  list;
}

我不明白这里为什么需要泛型。您试图返回任何类型的
TestPai
,但返回实际的具体类型将涵盖这一点

如果可以返回任何类型的
TestPai
,则可以执行以下操作:

public TestPai getList(){
如果只能返回一个实现类
TesteFilho
,则返回该实现类:

public TesteFilho getList(){

(这意味着
list
也必须是一个
TesteFilho

也许您可以告诉我们更多关于您正在尝试做的事情。代码示例不是泛型的使用方式。只看下面这样的代码:只看下面这样的代码:public的getList(){FatherOfAll list=new SonA();return list;}如果这是一个命令(考虑四人组模式),我想确保我返回某个对象的子类,但是我可以创建任何我想要的,与子类匹配的东西。我提出的一点是,为什么java在编译时抱怨它,第一个代码应该没有错误地编译…@Radiodef,对我来说,它的要点是方法
S getList()
的签名应该与代码匹配,因为类是FatherOfAll的子类。这段代码是真实代码的抽象,因为它来自我工作的地方。原始代码真的做到了我上面所说的,原因(至少看起来是这样)是因为他们想要返回实现接口的东西,它可能有子类。这段代码是真实代码的抽象,因为它来自我工作的地方。原始代码真的做到了我上面所说的,原因(至少看起来是这样)是因为他们想要返回实现接口的东西,并且它可能有子类。