有没有办法强制Arrays.asList的返回类型
问题内容:
我有一个方法返回基类的集合:
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)时,编译器抱怨它在逗号处期望’)’。
问题答案:
您的语法几乎是正确的;该<Base>
方法的名称前有云:
return Arrays.<Base>asList(new Derived(),
new Derived());
Java 8
对于Java
8,由于其改进的目标类型推断,因此不需要显式类型参数。由于该方法的返回类型为Collection<Base>
,因此将类型参数推断为Base
。
return Arrays.asList(new Derived(),
new Derived());
对于Java 7和更低版本,显式类型参数仍然是必需的。您仍然可以在Java 8中提供显式类型参数;这是可选的。