内部方法类公约

时间:2014-01-16 02:59:06

标签: java conventions

我最近遇到了一些看似令人震惊的代码。多年来我一直用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

有关方法内部类的规则是什么?

2 个答案:

答案 0 :(得分:2)

这称为本地班级。来自Java Docs

  

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

     

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

答案 1 :(得分:0)

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

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

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