java - 为什么Object实际上可以是Object[]?

标签 java arrays object 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)方法检索的对象返回一个字符串数组。如果一个对象实际上可以是一个数组,为什么这是非法的?

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

最佳答案

来自Java Tutorials. Arrays :

An array is a container object that...

来自Java Language Specification. Chapter 10. Arrays :

In the Java programming language, arrays are objects (§4.3.1), are dynamically created, and may be assigned to variables of type Object (§4.3.2). All methods of class Object may be invoked on an array.

简而言之,任何数组都是对象

关于java - 为什么Object实际上可以是Object[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23499859/

相关文章:

arrays - Swift 4 func prepare(for segue : UIStoryboardSegue, sender : Any?)不使用indexPath.row更新Int变量

javascript - JS 未推送到数组

javascript - 初始化包含数组的 javascript 对象

java - 由 : org. hibernate.LazyInitializationException 引起:未能延迟初始化角色集合:

java - JAVA中一个端口的阻塞套接字连接

NetBeans 的 Java 解析器库

c - 动态分配的二维数组未初始化

javascript - 更改按自定义属性排序的对象数组的顺序

javascript - 如何从javascript中的索引属性获取值?

java - 如何更改Tomcat开发环境中Spring Boot属性默认路径