gpt4 book ai didi

java - AP C.S. 作业中的 Java 断言

转载 作者:行者123 更新时间:2023-12-01 12:14:35 25 4
gpt4 key购买 nike

我正在创建一个简单的银行帐户类“BankAccount”。目标是增强类(class)以确保达到期望的值。例如,当构造该类的新对象时,构造函数要求初始余额大于 $0。它要求您使用断言

public class BankAccount 
{

priavte int balance;

public BankAccount(int initialBalance)
{
assert (initialBalance > 0);
balance = initialBalance;
}
}

这是使用断言的正确方法吗?如果 InitialBalance < 0,断言语句到底会做什么?

最佳答案

这不是使用断言的正确方法。事实上,Oracle有made clear断言不应该检查方法参数,更重要的是,永远不应该断言具有副作用的函数调用的结果(因为不能保证它实际上会被执行)。

它们被设计用于检查不变量(例如,列表类可能包含一些元素和int length,并且该长度必须等于元素的数量)。正确使用的另一个例子:

public Foo acquireFoo(int id) {
Foo result = null;
if (id > 50) {
result = fooService.read(id);
} else {
result = new Foo(id);
}
assert result != null;

return result;
}

如果 Java 应用程序在命令行上使用 -ea 运行,则将启用断言。当应用程序到达assert (initialBalance > 0);时,如果initialBalance小于0并且断言已启用,则java.lang.AssertionError将被抛出。如果不传递-ea,则不会抛出断言错误。

抛出 java.lang.IllegalArgumentException 会更明智。如下:

public BankAccount(int initialBalance)
{
if (initialBalance < 0){
throw new IllegalArgumentException("The initial balance may not be negative.");
}
balance = initialBalance;
}

关于java - AP C.S. 作业中的 Java 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com