繁体   English   中英

如何避免将一个变量从一种方法传递给另一种方法

[英]How to avoid passing one variable from one method to another

我正在重构一些旧的Java代码,我想知道是否有更好的方法来重构以下代码

private void createControlPanel() {
  int row = 0;
  row = initSessionControls(controlPanelGB, row);
  row = initBidControls(controlPanelGB, row);
  row = initSnapshotControls(controlPanelGB, row);
}

在每种方法中,行都会递增。 在我看来,这很丑。 我也不想做以下事情

private void createControlPanel() {
  row = initSessionControls(controlPanelGB, 1);
  row = initBidControls(controlPanelGB, 2);
  row = initSnapshotControls(controlPanelGB, 3);
}

关于如何最佳重构的任何建议? 我正在使用Java 8。

我建议使用ControlPanelFiller类:

class ControlPanelFiller {
    private final ... controlPanel;
    private int row = 0;
    public ControlPanelFiller(... controlPanel) {
        this.controlPanel = controlPanel;
    }
    public ControlPanelFiller initSessionControls() {
        ...
        ++row;
        return this;
    }
    public ControlPanelFiller initBidControls() {
        ...
        ++row;
        return this;
    }
    public ControlPanelFiller initSnapshotControls() {
        ...
        ++row;
        return this;
    }
}

private void createControlPanel()
{
    ControlPanelFiller cpf = new ControlPannelFiller(controlPanelGB);
    cpf.initSessionControls()
        .initBidControls()
        .initSnapshotControls();
}

您可以尝试以下代码

private void createControlPanel() {
int row =0;
  row += initSessionControls(controlPanelGB);
  row += initBidControls(controlPanelGB);
  row += initSnapshotControls(controlPanelGB);
}

您对这个代码感到不舒服是正确的。 似乎每个被调用的方法都知道要处理的下一行是什么,因此它们紧密耦合,并且用于确定下一行的逻辑分布在多个方法中。 如果下一行确实比上一行大1,那么最好在createControlPanel方法中集中此逻辑:

private void createControlPanel() {
  int initialRow = 0;
  initSessionControls(controlPanelGB, initialRow);
  initBidControls(controlPanelGB, initialRow+1);
  initSnapshotControls(controlPanelGB, initialRow+2);
}

这比上面的第二个解决方案更清楚,因为很明显第二个参数是一行,以及它与初始行值的关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM