java 反射内部匿名内部类_使用反射调用匿名内部类时应该注意的一些地方

在Java中,当使用反射调用匿名内部类的方法时,可能会遇到访问异常。原因在于匿名内部类默认是包级私有的,外部包无法直接访问。本文通过实例代码分析了为何在某些情况下可以正常执行,而在其他情况下会产生异常,并提出了解决方案,包括将匿名内部类改为公共类或通过获取父类来调用方法。
摘要由CSDN通过智能技术生成

06年写的

在使用匿名内部类时,当使用了反射机制来调用其中的方法就会出现访问异常,这是在前几天写程序时遇到的,所以在写匿名内部类时一定要注意是否在其它地方使用了反射调用。下面给出部份代码来说明此问题。

public classSuperTest {public voidhello() {

System.out.println("Hello from SuperTest");

}

}public classExec {public static voidrun(SuperTest target) {

System.out.println();

System.out.print("base class > ");

run(target, SuperTest.class, "hello"); //1 这里可以正常执行

System.out.print("obj class > ");

run(target, target.getClass(),"hello"); //2 这里可能产生异常

}static voidrun(Test1 target, Class cls, String method) {try{

cls.getMethod(method,null).invoke(target, null);

}catch(Exception x) {

System.out.println(x);

}

}

}public classTest {public static voidmain(String[] args) {

Exec.run(newSuperTest() {publ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值