2014-12-05 56 views
0

下面的代码在“return list;”中抛出异常。与typemismatch。它被认为不是。在方法中使用泛型:编译异常:抱怨类型:cannont转换为

public class Teste { 

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

class TesteFilho implements TestPai{ 

} 

interface TestPai{ 

} 

我发现了一个soluction它,puting像这样

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

class TesteFilho implements TestPai{ 

} 

interface TestPai{ 

} 

但它听起来不可思议,因为我有其他代码的地方之前编制的arent执行这样。 - 在jre1.7.0_51的windows机器上使用eclipse IDE作为执行环境。

有人可以帮助它按预期工作(在第一个代码中)。

在此先感谢。

+0

也许您可以告诉我们更多关于您正在尝试执行的操作。代码示例不是如何使用泛型。 – Radiodef 2014-12-05 17:50:16

+0

只看起来像这样的代码: – Leonardocregis 2014-12-15 11:04:28

+0

只看起来像这样的代码: public S getList(){ FatherOfAll list = new SonA(); 返回列表; } 作为它的一个命令(考虑到4模式的帮派),我想确保即时返回一个子类的东西,但我可以创建任何我想要的,匹配的子类。 我提出的一点是,为什么java在编译时间抱怨它,第一个代码应该编译没有错误.... – Leonardocregis 2014-12-15 11:36:00

回答

1

所有类型都是固定的!你根本没有使用类型参数。所以最简单的方法只是

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

这段代码是真正的代码的抽象,因为它来自我工作的地方。原始代码的确如上所述,原因(至少看起来如何)是因为他们想要返回实现接口的东西,并且它可能有子类。 – Leonardocregis 2014-12-15 10:49:24

1

我不明白为什么这里需要泛型。您正在尝试返回任何种类的TestPai,但这将通过返回实际的具体类型来覆盖。

如果可以返回任何类型的TestPai,那么这将做到:

public TestPai getList(){ 

如果只有一个实现类TesteFilho可以返回,然后返回一个实现类:

public TesteFilho getList(){ 

(即意味着list也必须是TesteFilho。)

+0

此代码是真正的抽象代码,因为它来自我工作的地方。原始代码的确如上所述,原因(至少看起来如何)是因为他们想要返回实现该接口的东西,并且它可能有子类。 – Leonardocregis 2014-12-15 10:49:01

相关问题