簡體   English   中英

如何重構這種類型的switch-case語句?

[英]How to Refactor this type of switch-case statement?

基於minIndex,我設置了不同的視圖可見性。 我認為可以將其重構為簡單的方法。

switch (minIndex) {
    case 0:
        viewOne.setVisibility(View.VISIBLE);
        break;
    case 1:
        viewTwo.setVisibility(View.VISIBLE);
        break;
    case 2:
        viewThree.setVisibility(View.VISIBLE);
        break;
    case 3:
        viewFour.setVisibility(View.VISIBLE);
        break;
    case 4:
        viewFive.setVisibility(View.VISIBLE);
        break;
    case 5:
        viewSix.setVisibility(View.VISIBLE);
        break;
}

如何將該代碼重構為更具可讀性的代碼?

如果數字與實際視圖很好地匹配,則可以使用數組。

View[] views = new View[] {viewOne, viewTwo, viewThree, ...};
...
views[minIndex].setVisibility(View.VISIBLE);

我認為您已經對該網站的代碼進行了匿名處理。 我本來建議@Sotirios Delimanolis回答了什么,但我認為您實際上做得太多了也太少了。

您已將控制器與視圖的綁定過多,並且已將視圖彼此的綁定過多。 為什么它們都應該在同一switch語句中?

如果添加其他視圖,則需要更改多少?

相反,您應該讓每個視圖向持有minindex的對象注冊一個PropertyChangeListener 順便說一句,這真是個壞名字。 當對象更改minindex ,應將PropertyChangeEvent發送給所有偵聽器。 每個視圖的偵聽器都應檢查事件是否希望該視圖可見。 如果是這樣,則視圖應自動喚醒。

class ViewController {
    private PropertyChangeSupport pcs = new PropertyChangeSupport();

    // delegate methods to add and remove listeners to pcs variable.

    private int viewIndex; // Changed for documentation.  Use String instead?

    public void setViewIndex(final int viewIndex) {
        int oldIndex = this.viewIndex;
        this.viewIndex = viewIndex; 
        pcs.firePropertyChange("viewIndex", oldIndex, this.viewIndex);
    }
}

class ViewOne {
    private ViewController vc;
    private final Integer myIndex = 1;

    // Constructor

    public void init() {
        // Never add this or an inner class to another object in a constructor.
        vc.addPropertyChangeListener("viewIndex",
            new PropertyChangeListener() {
                public propertyChange(final PropertyChangeEvent evt) {
                    if (myIndex.equals(evt.getNewValue()) {
                         setVisibility(View.VISIBLE);
                    }
                }
            });
    }
}

有關構造函數的警告是,如果你暴露this還是一個內部類的this在構造函數中的另一個對象,外部對象可以與交互this之前,它是完全構造。 您可以在構造函數中構建PCL。 使用另一種方法將其添加到控制器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM