在最近的 Java 中,Swing 代码中经常出现 linting 错误
possible 'this' escape before subclass is fully initialized
。例如,从 ctor 调用 AbstractAction.putValue()。
public class PauseAction extends AbstractAction {
private TrackModel model;
public PauseAction(TrackModel model) {
this.model = model;
putValue(NAME, "Pause");
// Bunch of other possible keys
}
@Override
public void actionPerformed(ActionEvent e) {
model.pause();
}
}
尝试避免此警告是愚蠢的行为吗?
我会在这里使用工厂模式
public class PauseAction extends AbstractAction {
private TrackModel model;
private PauseAction(TrackModel model) {
this.model = model;
}
@Override
public void actionPerformed(ActionEvent e) {
model.pause();
}
public static Action createPauseAction(TrackModel model) {
PauseAction result = new PauseAction(model);
result.putValue(NAME, "Pause");
// Bunch of other possible keys
return result;
}
}