好的,所以我知道如何访问包含内部类的外部类,无论是匿名还是内部类。
但我的问题是,如果它本身 是一个内部类,如何访问外部类?一些代码可以提供帮助:
public final class LocationPage extends BasePage {
private static final String CRITERIA_FORM_ID = "CriteriaForm";
protected Panel onCreateBodyPanel() {
return new ViewBodyPanel(BasePage.BODY_PANEL_ID) {
public void invokeMe() {
// How do I Invoke This Method?
}
private Form<CriteriaBean> helpCreateCriteriaForm() {
return new Form<CriteriaBean>(LocationPage.CRITERIA_FORM_ID) {
@Override
protected void onSubmit() {
LocationPage.this.ViewBodyPanel.invokeMe(); // Compile Error.
}
};
}
};
}
}
更新:对于那些想要了解我在这里尝试做什么的人,这里有一个完整的代码示例。这实际上是Apache Wicket,但我认为你可以得到这个想法。看看名为 onSubmit 的方法。我添加了一个代码注释来帮助查明它。
UPDATE TWO:将代码示例提供给点。对不起!
答案 0 :(得分:1)
您只需指定ParentClass.this.something即可消除歧义。如果您的表单没有方法invokeMe,您只需使用该名称而无需限定,编译器应该找到它:
private Form<CriteriaBean> helpCreateCriteriaForm() {
return new Form<CriteriaBean>(LocationPage.CRITERIA_FORM_ID) {
@Override
protected void onSubmit() {
invokeMe();
}
};
}
如果函数确实存在于内部内部类中,那么Java中没有任何技巧可以做到这一点。而是将ViewBodyPanel.invokeMe方法重命名或包装成明确的内容。
public void vbpInvokeMe(){
invokeMe();
}
private Form<CriteriaBean> helpCreateCriteriaForm() {
return new Form<CriteriaBean>(LocationPage.CRITERIA_FORM_ID) {
@Override
protected void onSubmit() {
vbpInvokeMe();
}
};
}
答案 1 :(得分:0)
好的,所以我知道如何访问包含内部的外部类 无论是匿名的还是内心的。
如果您使用内部课程,则可以执行以下操作
public class A{
public void printHello(){
System.out.println("Hello!");
}
class B{
public void accessA(){
A.this.printHello();
}
}
}