Java 如何从匿名类访问私有方法?
假设我有课:Java 如何从匿名类访问私有方法?,java,object,reflection,methods,Java,Object,Reflection,Methods,假设我有课: MyObject b = new MyObject(){ private void method(){} } 是否可以通过反射获取方法()?对于toString,我可以写: MyObject.class.getMethod("toString"); 但是对于新创建的私有方法呢?您必须在b引用上调用,以获取匿名类,在该类中声明该方法MyObject.class将为您提供class,这可能不是您想要的 然后使用获取私有方法: Method method = b.getCla
MyObject b = new MyObject(){
private void method(){}
}
是否可以通过反射获取方法()?对于toString,我可以写:
MyObject.class.getMethod("toString");
但是对于新创建的私有方法呢?您必须在b
引用上调用,以获取匿名类,在该类中声明该方法MyObject.class
将为您提供class
,这可能不是您想要的
然后使用获取私有方法:
Method method = b.getClass().getDeclaredMethod("method");
method.setAccessible(true);
method.invoke()
您可以将其用于:
Method method = b.getClass().getDeclaredMethod("method");
这里b.getClass()
将返回编译器为匿名内部类生成的类
然而,我很难想象在什么情况下这是一个好办法
请注意,如果使用本地命名类,则甚至不需要使用反射来调用该方法:
public class Test {
public static void main(String[] args) {
class Foo {
private void doSomething() {
System.out.println("Yes!");
}
};
Foo foo = new Foo();
foo.doSomething();
}
}
如果你能给我们提供更多关于你为什么要这样做的背景,我们可能会在寻找最佳解决方案方面提供更多帮助