java - String 数组是 Object 数组的子类吗?

标签 java arrays collections

我想我在这里遗漏了一些基本的东西。对先前提出的问题的任何解释或指示都将非常有帮助。

import java.util.Arrays;
import java.util.List;

public class St {

    public static void bla(Object[] gaga) {
            gaga[0] = new Date(); // throws ArrayStoreException
        System.out.println(gaga[0]);
    }

    public static void bla(List<Object> gaga) {
        System.out.println(gaga.get(0));
    }

    public static void main(String[] args) {
            String[] nana = { "bla" };
        bla(nana); // Works fine

        List<String> bla1 = Arrays.asList(args);
        bla(bla1); // Wont compile

            System.out.println(new String[0] instanceof Object[]); // prints true
            System.out.println(nana.getClass().getSuperclass().getSimpleName()); // prints Object
    }

}

所以,它看起来像一个 List<String>不是 List<Object> 的子类但是一个String[]Object[] 的子类.

这是一个有效的假设吗?如果是这样,为什么?如果不是,为什么?

谢谢

最佳答案

Java arrays are covariant ,即它们允许 Object[] foo = new String[2];。但这并不意味着它们是子类。 String[]Object 的子类(尽管 instanceof 返回 true,String[].class.getSuperclass() 返回 Object)

关于java - String 数组是 Object 数组的子类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8825440/

相关文章:

java - 集成 Struts 2 和 hibernate 的最佳方法

javascript - 'this' 不等于原型(prototype)中的 Bar

javascript - 检查数组元素是否存在,如果不存在,则使用 JavaScript 跳到下一个

java - 是否存在与 Python 的 zip() 等效的公认 Java?

java - 避免重置整型变量

java - 使用应用服务器的主要好处是什么?

java - 即时将数据流式传输到速度模板

java - 如何从数组中打印出对象?

c# - 在 C# 中,将接口(interface)列表转换为对象列表的推荐方法是什么?

.net - 将 IEnumerable 转换为列表