簡體   English   中英

如何從匿名類訪問私有方法?

[英]How access private methods from anonymous class?

假設我上課:

MyObject b = new MyObject(){
    private void method(){}
}

是否可以通過反射獲得method()? 對於toString我可以寫:

MyObject.class.getMethod("toString");

但是對於新創建的私有方法呢?

您必須在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();
    }
}

如果你能給我們更多關於你為什么想要這個的背景,我們可能會更有助於找到最好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM