【问题标题】:Convention on Classes Inside Methods [duplicate]方法内部类的约定[重复]
【发布时间】:2014-01-16 02:59:06
【问题描述】:

我最近遇到了一些看似令人震惊的代码。多年来我一直在使用 Java 进行编程,我从未在方法中看到过类,但用户说这是常见的做法。我尝试检查 Oracle 代码约定文档,但没有弹出任何与此相关的内容。

显示相关部分的代码如下:

public void start(){
    //...
    class startListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            started = true;
        }
    }
    panel.getStartButton().addActionListener(new startListener());
    //...
}

These do seem to compile just fine

方法中的类有哪些规则?

【问题讨论】:

  • 匿名类很常见,而不是你展示的。真的没有理由让他们在那里。
  • @SotiriosDelimanolis 我非常了解匿名类并经常使用它们。不同之处在于这些都是记录在案的。
  • 改用Local Class
  • @Scott 谢谢你!我不知道它是用那个名字,所以这是一个副本。到时候我会把它标记为关闭。

标签: java conventions


【解决方案1】:

这称为本地类。来自Java Docs

您可以在任何块内定义本地类(有关详细信息,请参阅表达式、语句和块)。例如,您可以在方法体、for 循环或 if 子句中定义本地类。

本地类可以访问其封闭类的成员...但是,本地类只能访问声明为 final 的本地变量。

【讨论】:

    【解决方案2】:

    我见过很多这样的代码,主要是用于关联侦听器的 SWT 代码。虽然我会使用匿名本地类而不是命名类对其进行编码。

    public void start(){
         panel.getStartButton().addActionListener(new startListener() {
           public void actionPerformed(ActionEvent e) {
                started = true;
            }
        });
    }
    

    但这可能只是我个人的喜好。

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 2012-05-27
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多