我有一个Swing应用程序,其中我有多个具有不同目标的窗口,但它们都有两个共同点:
因此,为了避免代码冗余,我想分享一些例程 也许一个例子可以更清楚:
public class WindowA {
private JLabel labelA;
// ...
private void updateLabelInACertainManner() {
labelA.setText(this.specificObject.getText());
}
}
public class WindowB {
private JLabel labelB;
// ...
private void updateLabelInACertainManner() {
labelA.setText(this.specificObject.getText());
}
}
如何知道updateLabelInACertainManner()
在两个类中引用相同的对象,我如何共享specificObject
?
我在考虑从包含该方法的WindowA
继承WindowB
和WindowRoot
,但如果labelA
和labelB
不是这样做的话相同的对象,不一定以相同的方式创建?
答案 0 :(得分:2)
答案 1 :(得分:1)
您可以将其文本作为参数更改的标签传递给超类中的方法:
public class SuperWindow {
protected void updateLabel(JLabel label) {
label.setText("foo");
}
}
public class WindowA extends SuperWindow {
private JLabel labelA;
//...
private void somethingHappened() {
updateLabel(labelA);
}
}
或者您可以为特定子类中的标签编写一个getter:
public class SuperWindow {
protected abstract JLabel getLabel();
protected void updateLabel() {
getLabel().setText("foo");
}
}
public class WindowA extends SuperWindow {
private JLabel labelA;
//...
@Override
protected JLabel getLabel() {
return labelA;
}
private void somethingHappened() {
updateLabel();
}
}
同样适用于specificObject
。