我正在查看Oracle的Java API,特别是这个属于java.util.Arrays
类的方法:
public static <T> List<T> asList(T... a)
但是当这个方法显然是一个接口时,这个方法怎么可能返回一个List对象呢?
答案 0 :(得分:4)
List
接口Arrays.asList方法的源代码
public static <T> List<T> More ...asList(T... a) {
return new ArrayList<T>(a);
}
答案 1 :(得分:4)
任何具有接口类型作为返回类型的方法实际上都会返回实现该接口的某个类的实例。将接口类型作为返回类型的观点允许方法的开发人员更改方法返回的实现而不更改API。
在Arrays.asList
的情况下,返回Arrays$ArrayList
(Arrays
类中的嵌套类)的实例。
答案 2 :(得分:2)
Method将返回子类对象。检查java的源代码
public static <T> List<T> More ...asList(T... a) {
return new ArrayList<T>(a);
}
同样阅读多态性
答案 3 :(得分:2)
它返回对List 的任何实例的引用。现在,实现List接口的任何类也都是List。示例ArrayList
是List
。
话虽如此,该方法返回List的实例。
请注意,返回的列表实例无法显式强制转换为java.util.ArrayList
,返回的实际实例的类型为Arrays$ArrayList