Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中为构造函数中的变量设置条件值?_Java_Constructor_Conditional - Fatal编程技术网

如何在Java中为构造函数中的变量设置条件值?

如何在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语句之外,还有其他方法吗 没有 但是,您所做的只是打印一条错误消息并继续使用无效值。

我试图创建一个条件,使可变价格不小于0,以便使用构造函数有效

这是我的密码

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");