求java反射中获得内部类的方法,如何用Java中的反射获取pirvate内部类实例?

本文探讨如何通过Java反射机制,即使InnerClass为私有,也能在OuterClass中获取并操作其实例。展示了如何使用Class对象、getDeclaredField和setAccessible方法,以及利用类加载器找到InnerClass的完整路径。
摘要由CSDN通过智能技术生成

让我们调整OuterClass代码有点更有趣的是:摆在InnerClass实例数组中:

private static InnerClass[] innerArr = { new InnerClass() };

现在你不能直接引用私有类型InnerClass另一类是试图通过反射来获得静态字段。您可以首先将其称为Object的数组。

public static void main(String[] args) throws Exception {

Class> cla = OuterClass.class;

Field innerArrRef = cla.getDeclaredField("innerArr");

innerArrRef.setAccessible(true);

Object[] innerArrValue = (Object[]) innerArrRef.get(cla);

你需要使用反射和Class对象使用InnerClas类型。

一种方法是使用OuterClass“类对象的declaredClasses属性:

Class> inner = cla.getDeclaredClasses()[0];

但是,如果有一个以上的成员类,你通过数组需要循环和寻找正确的。另一种方法是使用知识的javac会给您将InnerClass看起来像mypackage.OuterClass$InnerClass一个完全合格的类型名称:

Class> inner = cla.getClassLoader().loadClass(cla.getName() + "$InnerClass");

一旦有了将InnerClass的类的对象,你可以使用反射来访问它的领域,方法:

Field id = inner.getField("id");

System.out.println("Inner id: " + id.getInt(innerArrValue[0]));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值