有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

这是我的密码

public void setPrice(){ 

if(price > 0){

    System.out.println("Valid value");}
else{

    System.out.println("Error");} }

除了if语句之外,还有其他方法吗


共 (3) 个答案

  1. # 1 楼答案

    如果这是一个内部检查(例如,如果不是正价格,此时是编程错误),您可以使用assert。比如:

    assert price > 0 : "Price must be positive."
    

    如果这是检查外部生成的输入,则异常是更好的选择:

    if (price <= 0) { throw new IllegalArgumentException("Price must be positive"); }
    

    这仍然使用if。这些类型的验证方法通常放在实用方法中。例如,番石榴有Preconditions

    Preconditions.checkArgument(price > 0, "Price must be positive");
    

    最后还有一些验证框架,您可以在其中设置对象,并检查是否满足所有条件(例如:http://beanvalidation.org/

  2. # 2 楼答案

    I want to make sure that the value of price cant be less than 0 [...].

    Is there a different way to do it other than if statement?

    没有

    但是,您所做的只是打印一条错误消息,并继续使用无效值。这并不能达到你的要求

    以下是我认为你应该做的:

    public void setPrice(int price){ 
        if (price <= 0) {
            throw new IllegalArgumentException("price not > 0");
        } 
        // set the price
    }
    

    如果price值无效,将引发异常并“中断”正常流控制。您可以在(例如)调用此异常的方法中捕获并处理该异常。根据代码的使用位置,异常处理程序可能会要求用户输入正确的值、拒绝当前请求、跳过输入文件中的“记录”等等。但这样做的逻辑是。。。即使是报告问题也不是setPrice方法所关心的。此方法仅负责检查和设置价格

    或者,您可以让应用程序终止。这就是这里会发生的事情IllegalArgumentException是一个未经检查的异常,这意味着编译器不会坚持要求您对此进行处理

    您可以在构造函数中执行相同的操作。但是请注意,如果构造函数以异常终止,那么它创建的对象将不会完全初始化。通常它会被扔掉


    @Jay Anderson建议使用assert。这是一个可能的解决方案,但在这里可能不合适。问题是assert断言的检查可以通过命令行选项关闭。(事实上,断言检查默认为“关闭”)

    • 您不希望人们能够关闭对用户提供的值的检查

    • 您不希望人们能够关闭对其他人软件提供的值的检查

    • 您不希望人们能够关闭对系统其他部分提供的值的检查

    事实上,只有当您确信它可以在生产环境中运行而不需要执行检查时,断言才是合适的。。。完全我的建议是根本不使用它们。相反,使用(单独的)单元测试来发现代码中的问题

  3. # 3 楼答案

    下面是您定义的构造函数的一些伪代码

    public nameOfClass(type param){
    
    if(param > 0){
    throw new IllegalArgumentException("Error parameter may not be lower than 0");
    }
    
    
    }
    

    我相信如果您不希望参数小于零,那么构造函数就是这样工作的

    我也相信,如果声明几乎肯定是最好的方式去做这件事