为什么我们不能直接在数组引用上调用asList()?

时间:2017-02-08 18:01:32

标签: arrays string list methods collections

我有一个相当奇怪的问题,但我认为最好澄清一下,然后按照我正在阅读的那本书。

目前,我正在了解Collections以及如何将数组转换为List

例如,

String[] colors = {"red", "blue", green", "white", "orange"};
List<String> list = Arrays.asList(colors);

我的问题是为什么我们不能直接调用该方法?

String[] colors = {"red", "blue", green", "white", "orange"};
colors.asList();

对于String类,我们可以通过调用方法直接将字符串对象转换为大写?

String[] colors = {"red", "blue", green", "white", "orange"};
String result = colors.toUpperCase();

2 个答案:

答案 0 :(得分:2)

  

我的问题是为什么我们不能直接调用该方法?

您无法调用该方法,因为该方法不存在于任何数组类型类中。您无法调用未在类中定义的方法。例如:

class MyClass {
   public void method() { }
}

您不能说new MyClass().whyCantICallThisMethod(),因为MyClass没有此方法。

也就是说,数组与其他类不同,因为它们是由JVM创建的(在运行时)。设计人员认为不适合要求JVM动态添加asList方法。

答案 1 :(得分:0)

使用类名调用静态方法,并在实例上调用实例方法。 asList()被定义为Arrays类中的静态方法,因此您不需要创建Arrays类的实例。相反,您将其调用为<Class-Name>.<Static-Method>,在您的情况下为Arrays.asList()

因此,在您的示例代码中,对于String[] colors数组,您无法调用asList()方法。

此外,toUpperCase()方法不适用于字符串数组,而是可以在String对象上调用它。