if / else语句在java构造函数中

时间:2012-11-02 20:34:02

标签: java constructor

当我在Setters中只有if / else条件时,该程序无效。我得到了一个提示,我必须在构造函数中使用它们。有人可以向我解释..为什么?

另一个问题:您是否将if / else语句放在构造函数或Setter中?

//构造

   public Invoice(String partNumber, String partDescription, int quantity,
        double pricePerItem) {
    super();
    this.partNumber = partNumber;
    this.partDescription = partDescription;

    if (quantity <= 0)
        quantity = 0;
    else
        this.quantity = quantity;

    if (pricePerItem <= 0)
        pricePerItem = 0.0;
    else
        this.pricePerItem = pricePerItem;
}

//塞特斯

  public void setQuantity(int quantity) {
    if (quantity <= 0)
        this.quantity = 0;
    else
        this.quantity = quantity;
}

public double getPricePerItem() {
    return pricePerItem;
}

public void setPricePerItem(double pricePerItem) {

    if (pricePerItem != 0.0)
        this.pricePerItem = 0.0;

    else
        this.pricePerItem = pricePerItem;
}

4 个答案:

答案 0 :(得分:7)

您需要将它们放在构造函数中,否则数据也可能无效。当然,您可以通过在构造函数中调用setter来避免冗余代码!

他们在构造函数中不起作用的原因是因为您需要执行this.quantity = 0;而不是quantity = 0;

从构造函数中调用setter的示例:

public Invoice(String partNumber, String partDescription, int quantity,
               double pricePerItem) {
    super();
    this.partNumber = partNumber;
    this.partDescription = partDescription;

    // call Setter methods from within constructor
    this.setQuantity(quantity);
    this.setPricePerItem(pricePerItem);
}

答案 1 :(得分:5)

最好的办法是将if / else语句放在setter中,并使用构造函数中的setter。这样你就可以将你的逻辑放在一个地方,而且维护起来要容易得多。

答案 2 :(得分:3)

将if / else语句放在构造函数和setter中都经常使用。它确保对象永远不会处于无效状态。

正如John3136在评论中指出的那样,最好从构造函数中调用setter来减少重复代码的数量。

你的构造函数的if / else块仍然有bug。

  if (quantity <= 0)
    quantity = 0;    //  <-- this is setting the parameter passed to 0
else
    this.quantity = quantity;  // <-- this.quantity is only ever set if quantity is > 0.

您希望将if的正文更改为this.quantity或删除else,并始终在{{1}之后执行this.quantity = quantity作业}}

设计建议:当您收到数量&lt;时,请考虑抛出IllegalArgumentException。 0或价格&lt; 0而不是默认为0.这取决于您的具体要求,但为-1对象创建发票似乎应该是一个错误。

答案 3 :(得分:1)

  

。我得到了一个提示,我必须在构造函数中使用它们。有人可以向我解释..为什么?

最有可能避免代码重复。

  

另一个问题:您是否将if / else语句放在构造函数或Setter中?

即使你把它放在构造函数中,你也需要在setters中使用它们。

BTW if/else statements验证