为什么Object实际上是Object []?

时间:2014-05-06 16:15:53

标签: java arrays object reflection

我刚刚遇到这种行为,因为我使用Reflection编写了一个dumpObject方法。

重现:

public static class Tester {
        private String[] objects = new String[] { "a", "b", "c" };
    }

    public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
        System.out.println("testing Reflection");
        Tester tester = new Tester();
        Class<? extends Tester> class1 = tester.getClass();
        for (Field f : class1.getDeclaredFields()) {
            System.out.println(f);
            if (!f.isAccessible()) {
                f.setAccessible(true);
            }
            Object object = f.get(tester);
            System.out.println(object);
        }

    }

在这种情况下,通过f.get(tester)方法检索的对象返回一个String数组。如果一个Object实际上可以是一个数组,为什么这是非法的?

Object o = new String[]{"a", "b"};

2 个答案:

答案 0 :(得分:4)

来自Java Tutorials. Arrays

  

数组对象的容器......

来自Java Language Specification. Chapter 10. Arrays

  

在Java编程语言中, arrays 是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2 )。可以在数组上调用类Object的所有方法。

简而言之,任何数组都是Object

答案 1 :(得分:4)

Object o = new String[]{"a", "b"};

完全合法的java代码:

  

Class Object是类层次结构的根。每个班级都有   对象作为超类。所有对象,包括数组,都实现了   这类方法。

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html