我有一个返回基类集合的方法:
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)时,编译器抱怨它在逗号处期待一个')'。