如何在Java中为构造函数中的变量设置条件值?
我试图创建一个条件,使可变价格不小于0,以便使用构造函数有效 这是我的密码如何在Java中为构造函数中的变量设置条件值?,java,constructor,conditional,Java,Constructor,Conditional,我试图创建一个条件,使可变价格不小于0,以便使用构造函数有效 这是我的密码 public void setPrice(){ if(price > 0){ System.out.println("Valid value");} else{ System.out.println("Error");} } 除了if语句之外,还有其他方法吗 我想确保price的值不能小于0[…] 除了if语句之外,还有其他方法吗 没有 但是,您所做的只是打印一条错误消息并继续使用无效值。
public void setPrice(){
if(price > 0){
System.out.println("Valid value");}
else{
System.out.println("Error");} }
除了if语句之外,还有其他方法吗
我想确保price的值不能小于0[…] 除了if语句之外,还有其他方法吗 没有 但是,您所做的只是打印一条错误消息并继续使用无效值。这并不能达到你的要求 以下是我认为你应该做的:
public void setPrice(int price){
if (price <= 0) {
throw new IllegalArgumentException("price not > 0");
}
// set the price
}
publicsvoidsetprice(intprice){
如果(priceBellow)是您定义的构造函数的一些伪代码
public nameOfClass(type param){
if(param > 0){
throw new IllegalArgumentException("Error parameter may not be lower than 0");
}
}
我相信如果您不希望参数小于零,那么构造函数就是这样工作的
我也相信and if语句几乎肯定是实现这一点的最佳方式。如果这是一个内部检查(例如,如果它不是正价格,此时是编程错误),您可以使用断言
。类似于:
assert price > 0 : "Price must be positive."
如果这是检查外部生成的输入,则异常是更好的选择:
if (price <= 0) { throw new IllegalArgumentException("Price must be positive"); }
最后是验证框架,您可以在其中设置对象,并检查是否满足所有条件(示例:)您所做的大部分是正确的,但这不是构造函数。这是一个setter。哦,好的,谢谢您指出我有点困惑。我想确保构造函数中price的值不能小于0,但与此setPrice方法一起使用这是一个糟糕的解决方案。如果您这样做并且参数不正确,则打印一个error消息,然后构造一个值不正确的对象!否?如果传入的参数大于零,则不会设置。public Food(double price){if(price<0){System.out.println(“not accepted”);}else{this.price=price;}
@Eoghan_Mulcahy-1)如果您不在此处进行检查,那么测试仍需要在其他地方进行。2)检查构造函数(无论如何!)的一个原因是发现您所说的那种愚蠢的(程序员)错误。(假设有很多人在处理此代码……)@请不要!另外,我想指出com.google.common.primitives Unsigned
类型,并将someSortoException
更改为IllegalArgumentException
。目前为止,我不允许使用我们所学内容之外的内容。仍然没有使用“assert”,因此我无法使用它。(关于“断言”是否是合适的解决方案的讨论,请参见我的答案。
Preconditions.checkArgument(price > 0, "Price must be positive");