假设我有课程:
MyObject b = new MyObject(){
private void method(){}
}
是否可以通过反射获得method()?对于toString我可以写:
MyObject.class.getMethod("toString");
但是对于新创建的私有方法呢?
答案 0 :(得分:8)
您必须在b
引用上调用Object#getClass()
来获取声明方法的匿名类。 MyObject.class
会给你Class<MyObject>
,这可能不是你想要的。
然后使用Class#getDeclaredMethod()
获取私有方法:
Method method = b.getClass().getDeclaredMethod("method");
method.setAccessible(true);
method.invoke()
答案 1 :(得分:5)
您可以将其用于:
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();
}
}
如果你能给我们更多关于你为什么想要这个的背景,我们可能会更有助于找到最佳解决方案。