我是在使用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 o = new String[]{"a", "b"};
来自Java教程。数组:
数组是一个容器对象,它…
来自Java语言规范。第十章。数组:
在Java编程语言中,数组是对象(第4.3.1节),是动态创建的,并且可以赋值给
Object
类型的变量(第4.3.2节)。Object
类的所有方法都可以在数组上调用。
简而言之,任何数组都是Object
。
Object o = new String[]{"a", "b"};
是完全合法的java代码:
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.htmlClass Object是类层次结构的根。每个班级都有对象作为超类。所有对象,包括数组,都实现方法。