我有一个返回基类集合的方法:
import java.util.*;
class Base { }
class Derived extends Base { }
Collection<Base> getCollection()
{
return Arrays.asList(new Derived(),
new Derived());
}
由于Arrays.asList
的返回类型(List<Derived>
)与该方法的返回类型(Collection<Base>
)不匹配,所以会导致编译失败。我理解这种情况发生的原因是,由于泛型类型不同,两个类之间不存在继承关系。
有许多方法可以解决编译器错误,例如更改方法的返回类型、不使用Arrays.asList或将其中一个派生对象转换为Base。
是否有一种方法可以告诉编译器在解析Arrays.asList调用的泛型类型时使用不同但兼容的类型?(我一直在尝试使用这种模式,并遇到了这个问题,所以如果有一种方法可以使它起作用,我想知道它。)
我认为你可以做类似这样的事情:
Collection<Base> getCollection()
{
return Arrays.asList<Base>(new Derived(),
new Derived());
}
当我试图编译那个程序(Java 6版本),编译器抱怨在逗号处期望一个 ')'。
MyClass.<Derived> builder().someMethodWithGenericSignature(derived)
的事情时遇到过这种情况。 - Troy Daniels