好的,所以我知道如何访问包含内部类的外部类,无论是匿名的还是内部的。
但我的问题是,如果外部类本身是内部类,如何访问外部类?一些代码来帮助:
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 的方法。我添加了代码注释以帮助查明它。
更新二:使代码示例切题。对此感到抱歉!
最佳答案
你只需要指定 ParentClass.this.something 来消除歧义。如果您的 Form 没有 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();
}
};
}
关于java - 在匿名或本地内部类中访问匿名或本地内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8481383/