简化便利构造函数

时间:2013-11-02 04:09:50

标签: java

我有一个工作方便的构造函数,但我觉得它的代码太多了。我不确定如何简化它,但我将不胜感激任何帮助!

public Hand(Card c1, Card c2, Card c3, Card c4, Card c5, Card c6) {
    this();
    this.card1 = c1;
    this.card2 = c2;
    this.card3 = c3;
    this.card4 = c4;
    this.card5 = c5;
    this.card6 = c6;
    if (c1 != null && c2 != null && c3 != null && c4 != null && c5 != null && c6 != null) {
        for (int count = 0; count < 6; count++) {
            if (count == 0) {
                cardsInHand.add(c1);
            } else if (count == 1) {
                cardsInHand.add(c2);
            } else if (count == 2) {
                cardsInHand.add(c3);
            } else if (count == 3) {
                cardsInHand.add(c4);
            } else if (count == 4) {
                cardsInHand.add(c5);
            } else if (count == 5) {
                cardsInHand.add(c6);
            }
        }
    }
}

编辑:清除代码并提供以下建议。该程序仍然使用以下代码运行:

public Hand(Card c1, Card c2, Card c3, Card c4, Card c5, Card c6) {
    this();
    this.card1 = c1;
    this.card2 = c2;
    this.card3 = c3;
    this.card4 = c4;
    this.card5 = c5;
    this.card6 = c6;

    cardsInHand.add(c1);
    cardsInHand.add(c2);
    cardsInHand.add(c3);
    cardsInHand.add(c4);
    cardsInHand.add(c5);
    cardsInHand.add(c6);

2 个答案:

答案 0 :(得分:1)

for循环是多余的,因为它将按此顺序添加

cardsInHand.add(c1);
cardsInHand.add(c2);
//etc

会做同样的事情。

您还可以考虑使用var args构造函数:

public Hand(Card ... cards){
   this.card1=cards[0];
   //etc

答案 1 :(得分:1)

您的for循环既不必要又容易混淆。你正在做的是将每张卡添加到列表中,它所属的顺序是自然而不是强制 - 除非你明确输入不是第一个参数的卡,然后你赢了不按规定进入。

并不是真的应该重要。一手牌更像是一个跳过列表,其中插入顺序很少。

此外,由于您声称有一张卡片的支持列表,因此您的字段也很少。让我们摆脱这些,只需将值直接添加到列表中。

我将使用varargs构造函数 - 这样,在初始化时,您不必总是只添加五张卡片。

public Hand(Card... cards) {
    for(Card c: cards) {
        if(c != null) { // if you want to be really careful...
            cardsInHand.add(c);
        }
    }
}