Java Arrays.asList(T…a)如何返回接口?
我正在研究Oracle的Java API,特别是这个方法,它是Java Arrays.asList(T…a)如何返回接口?,java,arrays,oop,Java,Arrays,Oop,我正在研究Oracle的Java API,特别是这个方法,它是Java.util.Arrays类的一部分: 公共静态列表asList(T…a) 但是,当这个方法显然是一个接口时,它怎么可能返回一个列表对象呢? 它被称为多态性 这意味着您可以使用超类型引用来引用子类型 在这种情况下,该方法将返回实现列表接口的类实例 方法的源代码 公共静态列表更多…asList(T…a){ 返回新的ArrayList(a); } 任何将接口类型作为其返回类型的方法实际上都会返回实现该接口的某个类的实例。将接口类型
Java.util.Arrays
类的一部分:
公共静态列表asList(T…a)
但是,当这个方法显然是一个接口时,它怎么可能返回一个列表对象呢?- 它被称为多态性
- 这意味着您可以使用超类型引用来引用子类型
- 在这种情况下,该方法将返回实现
接口的类实例列表
公共静态列表更多…asList(T…a){
返回新的ArrayList(a);
}
任何将接口类型作为其返回类型的方法实际上都会返回实现该接口的某个类的实例。将接口类型作为返回类型的意义在于允许方法的开发人员在不更改API的情况下更改方法返回的实现
对于
数组.asList
,将返回数组$ArrayList
(数组类中的嵌套类)的实例。方法将返回子类对象。检查java的源代码
public static <T> List<T> More ...asList(T... a) {
return new ArrayList<T>(a);
}
公共静态列表更多…asList(T…a){
返回新的ArrayList(a);
}
阅读多态性
它返回对列表的任何实例的引用。现在,实现List接口的任何类也是List。示例ArrayList
是一个列表
也就是说,该方法返回列表的一个实例。
请注意,返回的列表实例不能显式转换为java.util.ArrayList
,实际返回的实例类型为Arrays$ArrayList
,方法可以返回接口。返回的对象是实现接口的类的实例。只是一个建议。能否将子类对象
更改为子类型
?我觉得子类对象意味着超类型,即列表是一个类而不是接口。表示超类型或子类型将是接口和类的应用程序。请注意:该方法的ArrayList
不是java.util.ArrayList
,而是Arrays
类的私有内部类:
public static <T> List<T> More ...asList(T... a) {
return new ArrayList<T>(a);
}