如何遍历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
相关产品推荐
相关产品推荐

