java - 在匿名或本地内部类中访问匿名或本地内部类

标签 java class local anonymous

好的,所以我知道如何访问包含内部类的外部类,无论是匿名的还是内部的。

但我的问题是,如果外部类本身内部类,如何访问外部类?一些代码来帮助:

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/

相关文章:

c++ - 如何使用 `constexpr`兼容实例化创建这种类型的C++模板数组集合类

c++ - 我将如何删除此类对象? (C++)

java - 等效 Java 和 Kotlin Stream 代码之间的意外类型差异

java - 如何使用 .sh 脚本运行具有不同 java 路径的 jar (Openj9)

c++ - 访问与父类是 friend 的类的私有(private)成员

file - 如何在 Visual Studio Code 中查看本地历史记录更改?

Ubuntu 16.04 rc.local - 不在启动时运行

swift - 如何在 Swift 中查找连接到本地网络的设备?

java - 将毫秒时间戳反序列化为 java.time.Instant

javax.命名.AuthenticationException