我有以下方法:
我有以下方法:
public <T extends Result> T execute(Command<T> command)
{
return new LoginResult();
}
这里,Result
是一个接口,而类 LoginResult
实现了该接口。然而,我遇到了以下错误:
不兼容的类型,需要: T,但发现: com.foo.LoginResult
如果我将方法签名更改为:
public Result execute(Command<T> command)
然后同样的返回行就可以正常工作,没有任何错误。
问题出在哪里?我怎样才能从这个方法中返回 LoginResult
?
编辑:我想使用泛型的原因是,这样我就可以做以下的事情:
Command<LoginResult> login = new Command<>();
LoginResult result = execute( login );
<T extends Result>
作为返回值?如果只放一个Result
,它也可以返回子类。你想从哪里获取泛型类型?这个类也是泛型的吗? - NeplatnyUdajClass<T> cls
参数,并使用Class.cast()
进行向下转型。这将消除编译器错误,并导致ClassCastException
仅在代码中实际出现转换时发生。 - millimoose