如何在Java中为构造函数中的变量设置条件值?
我试图创建一个条件,使可变价格不小于0,以便使用构造函数有效
这是我的密码
public void setPrice(){
if(price > 0){
System.out.println("Valid value");}
else{
System.out.println("Error");} }
除了if语句之外,还有其他方法吗
你可以在下面搜索框中键入要查询的问题!
我试图创建一个条件,使可变价格不小于0,以便使用构造函数有效
这是我的密码
public void setPrice(){
if(price > 0){
System.out.println("Valid value");}
else{
System.out.println("Error");} }
除了if语句之外,还有其他方法吗
# 1 楼答案
如果这是一个内部检查(例如,如果不是正价格,此时是编程错误),您可以使用
assert
。比如:如果这是检查外部生成的输入,则异常是更好的选择:
这仍然使用
if
。这些类型的验证方法通常放在实用方法中。例如,番石榴有Preconditions
:最后还有一些验证框架,您可以在其中设置对象,并检查是否满足所有条件(例如:http://beanvalidation.org/)
# 2 楼答案
没有
但是,您所做的只是打印一条错误消息,并继续使用无效值。这并不能达到你的要求
以下是我认为你应该做的:
如果
price
值无效,将引发异常并“中断”正常流控制。您可以在(例如)调用此异常的方法中捕获并处理该异常。根据代码的使用位置,异常处理程序可能会要求用户输入正确的值、拒绝当前请求、跳过输入文件中的“记录”等等。但这样做的逻辑是。。。即使是报告问题也不是setPrice
方法所关心的。此方法仅负责检查和设置价格或者,您可以让应用程序终止。这就是这里会发生的事情
IllegalArgumentException
是一个未经检查的异常,这意味着编译器不会坚持要求您对此进行处理您可以在构造函数中执行相同的操作。但是请注意,如果构造函数以异常终止,那么它创建的对象将不会完全初始化。通常它会被扔掉
@Jay Anderson建议使用
assert
。这是一个可能的解决方案,但在这里可能不合适。问题是assert
断言的检查可以通过命令行选项关闭。(事实上,断言检查默认为“关闭”)您不希望人们能够关闭对用户提供的值的检查
您不希望人们能够关闭对其他人软件提供的值的检查
您不希望人们能够关闭对系统其他部分提供的值的检查
事实上,只有当您确信它可以在生产环境中运行而不需要执行检查时,断言才是合适的。。。完全我的建议是根本不使用它们。相反,使用(单独的)单元测试来发现代码中的问题
# 3 楼答案
下面是您定义的构造函数的一些伪代码
我相信如果您不希望参数小于零,那么构造函数就是这样工作的
我也相信,如果声明几乎肯定是最好的方式去做这件事