我最近遇到了一些看似令人震惊的代码。多年来我一直用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
有关方法内部类的规则是什么?
答案 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;
}
});
}
但这可能只是我个人的偏好。