以下是我的示例课程。如您所见,我已经定义了一个类InnerClass
,并在main方法中创建了一个实例。但是,我没有使用普通声明,而是使用基类中没有的方法声明了它的匿名内部类。
现在我知道如果我在InnerClass中声明helloWorld()
,那么我可以在通过匿名内部类创建的实例上访问此方法。
但我想知道,如果可以在我的代码中没有在基类中声明的情况下调用此方法。我尝试过探索反射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());
}
}
}
答案 0 :(得分:1)
getDeclaredMethod
检索可以使用invoke
执行的方法:
Method method = inner.getClass().getDeclaredMethod("helloWorld");
method.invoke(inner);
答案 1 :(得分:0)
以下代码使用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[])