Java 在方法中使用泛型:编译中的异常:抱怨类型:无法转换为
下面的代码在“return list;”中抛出一个类型不匹配的异常。幸亏没有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{ } 公共类
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的子类。这段代码是真实代码的抽象,因为它来自我工作的地方。原始代码真的做到了我上面所说的,原因(至少看起来是这样)是因为他们想要返回实现接口的东西,它可能有子类。这段代码是真实代码的抽象,因为它来自我工作的地方。原始代码真的做到了我上面所说的,原因(至少看起来是这样)是因为他们想要返回实现接口的东西,并且它可能有子类。