【发布时间】:2013-09-03 22:52:18
【问题描述】:
假设我有课:
MyObject b = new MyObject(){
private void method(){}
}
是否可以通过反射获得method()?对于 toString 我可以写:
MyObject.class.getMethod("toString");
但是对于新创建的私有方法呢?
【问题讨论】:
标签: java object reflection methods
假设我有课:
MyObject b = new MyObject(){
private void method(){}
}
是否可以通过反射获得method()?对于 toString 我可以写:
MyObject.class.getMethod("toString");
但是对于新创建的私有方法呢?
【问题讨论】:
标签: java object reflection methods
您必须在b 引用上调用Object#getClass() 以获取声明方法的匿名类。 MyObject.class 会给你Class<MyObject>,这可能不是你想要的。
然后使用Class#getDeclaredMethod()获取私有方法:
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();
}
}
如果您可以向我们提供更多关于您为什么想要这样做的背景信息,我们可能会在寻找最佳解决方案方面提供更多帮助。
【讨论】: