假設我有類:如何訪問匿名類的私有方法?
MyObject b = new MyObject(){
private void method(){}
}
是否有可能獲得通過反射法()?對於toString我可以這樣寫:
MyObject.class.getMethod("toString");
但是對於新創建的私有方法呢?
假設我有類:如何訪問匿名類的私有方法?
MyObject b = new MyObject(){
private void method(){}
}
是否有可能獲得通過反射法()?對於toString我可以這樣寫:
MyObject.class.getMethod("toString");
但是對於新創建的私有方法呢?
您必須調用Object#getClass()
b
引用才能獲取聲明該方法的匿名類。 MyObject.class
會給你Class<MyObject>
,這可能不是你想要的。
然後用Class#getDeclaredMethod()
獲得私有方法:
Method method = b.getClass().getDeclaredMethod("method");
這裏b.getClass()
將返回爲您生成的匿名內部編譯器類:
Method method = b.getClass().getDeclaredMethod("method");
method.setAccessible(true);
method.invoke()
你可以使用它類。
但是,我不能輕易想象出這是一種很好的方法。
請注意,如果您使用本地名爲類,你甚至不需要使用反射來調用方法:
public class Test {
public static void main(String[] args) {
class Foo {
private void doSomething() {
System.out.println("Yes!");
}
};
Foo foo = new Foo();
foo.doSomething();
}
}
如果你可以給我們介紹一下你爲什麼要這樣更多的上下文,我們可能會在尋找最佳解決方案方面提供更多幫助。