Arrays.asList(T ... a)如何返回一个接口?

时间:2015-04-13 06:15:07

标签: java arrays oop

我正在查看Oracle的Java API,特别是这个属于java.util.Arrays类的方法:

public static <T> List<T> asList(T... a)

但是当这个方法显然是一个接口时,这个方法怎么可能返回一个List对象呢?

4 个答案:

答案 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$ArrayListArrays类中的嵌套类)的实例。

答案 2 :(得分:2)

Method将返回子类对象。检查java的源代码

public static <T> List<T> More ...asList(T... a) {
        return new ArrayList<T>(a);
  }

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Arrays.java#Arrays.asList%28java.lang.Object%5B%5D%29

同样阅读多态性

http://www.tutorialspoint.com/java/java_polymorphism.htm

答案 3 :(得分:2)

它返回对List 的任何实例的引用。现在,实现List接口的任何类也都是List。示例ArrayListList

话虽如此,该方法返回List的实例。 请注意,返回的列表实例无法显式强制转换为java.util.ArrayList,返回的实际实例的类型为Arrays$ArrayList