如何使用反射从外部获取对匿名内部 class 方法 'helloWorld' 的引用

How can I get reference to anonymous inner class method 'helloWorld' from outside using reflection

下面是我的示例 class。如您所见,我定义了一个 class InnerClass 并在 main 方法中创建了它的一个实例。但是我没有使用正常的声明,而是使用基 class.

中不存在的方法声明了它的匿名内部 class

现在我知道如果我将在 InnerClass 中声明 helloWorld(),那么我可以在通过匿名内部创建的实例上访问此方法 class。

但我想知道,是否可以在我的代码中不在基 class 中声明而调用此方法。我尝试探索反射 API 但没有任何运气

import java.lang.reflect.Method;

public class InnerClass {
int i = 10;

public static void main(String[] args) {
    InnerClass inner = new InnerClass() {
        void helloWorld() {
            System.out.println("Hello");
            System.out.println(this.getClass().getEnclosingMethod());
        }
    };
    System.out.println(inner.getClass().getEnclosingMethod());
    Method[] method = inner.getClass().getDeclaredMethods();

    // Call helloworld method here

    for (Method me : method) {
        System.out.println(me.getName());
    }
}
}

getDeclaredMethod 检索可以用 invoke:

执行的方法
Method method = inner.getClass().getDeclaredMethod("helloWorld");
method.invoke(inner);

下面的代码使用getDeclaredMethod找到你想要的Method,然后调用invoke来调用它。

import java.lang.reflect.*;

public class InnerClass {

    public static void main(String[] args) {
        InnerClass inner = new InnerClass() {
            void helloWorld() {
                System.out.println("Hello");
                System.out.println(this.getClass().getEnclosingMethod());
            }
        };

        try {
            Method m = inner.getClass().getDeclaredMethod("helloWorld");
            m.invoke(inner);
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

输出:

Hello
public static void InnerClass.main(java.lang.String[])