You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历Java嵌套类并调用其重写的toString方法(无需初始化)

解决方法

你当前的代码调用的是Class类自身的toString()方法,自然只会输出类的全限定名。要获取嵌套类重写后的toString()返回值,必须创建该类的实例——因为toString()是实例方法,只能通过对象调用。不过可以借助反射自动完成实例化,不用手动逐个编写初始化代码。

修改后的代码示例

import java.lang.reflect.Constructor;

public class Test {
    public static void main(String[] args) {
        for (Class<?> nestedClass : MyClass.class.getDeclaredClasses()) {
            try {
                // 获取默认构造器并创建实例
                Constructor<?> constructor = nestedClass.getDeclaredConstructor();
                Object instance = constructor.newInstance();
                // 调用实例的toString方法
                System.out.println(instance.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

class MyClass {
    static class NestedClassOne {
        @Override
        public String toString() { return "One"; }
    }
    static class NestedClassTwo {
        @Override
        public String toString() { return "Two"; }
    }
}

代码说明

  • getDeclaredConstructor()获取类的无参默认构造器,你的嵌套类都是static且无自定义构造器,因此可以直接使用。
  • newInstance()创建类的实例,之后调用该实例的toString(),就能得到你定义的返回值。
  • 捕获异常是因为反射操作可能抛出多种异常(比如构造器不可访问、实例化失败等)。

输出结果

One
Two

内容的提问来源于stack exchange,提问作者Nathan Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:09:36