【问题标题】:How to initialize anonymous inner class in Java如何在 Java 中初始化匿名内部类
【发布时间】:2023-03-24 02:13:01
【问题描述】:

有没有办法在 Java 中初始化匿名内部类?

例如:

new AbstractAction() {
    actionPerformed(ActionEvent event) {
    ...
    }
}

有什么方法可以在类声明的某处使用例如 putValue 方法吗?

【问题讨论】:

  • 你是什么意思?当你说 new 时,你已经在初始化了。

标签: java


【解决方案1】:

使用初始化块:

new AbstractAction() {

    {
        // do stuff here
    }

    public void actionPerformed(ActionEvent event) {
    ...
    }
}

初始化实例成员

通常,您会将代码 初始化一个实例变量 构造函数。那里有两个 使用构造函数的替代方法 初始化实例变量: 初始化块和最终方法。 例如初始化块 变量看起来就像静态的 初始化程序块,但没有 静态关键字:

{
    // whatever code is needed for initialization goes here
}

Java 编译器复制初始化程序 阻塞到每个构造函数中。 因此,可以使用这种方法 在之间共享一段代码 多个构造函数。

来源:

【讨论】:

    【解决方案2】:

    不太清楚你的意思,但是你可以使用初始化块在构造时执行代码:

    new AbstractAction() {
    
        {
            // This code is called on construction
        }
    
        @Override public void actionPerformed(ActionEvent event) {
        ...
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用实例初始化部分:

      new AbstractAction() {
          {
             //initialization code goes here
          }
      
          actionPerformed(ActionEvent event) {
          ...
          }
      }
      

      【讨论】:

        【解决方案4】:

        或者你可以只从内部类访问外部类的变量。

        http://en.wikibooks.org/wiki/Java_Programming/Nested_Classes#Anonymous_Classes

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多