如何用 if 替换断言?例子:
public Wezel<Wartosc,Indeks> getWujek()
{
assert rodzic != null; // Root node has no uncle
assert rodzic.rodzic != null; // Children of root has no uncle
return rodzic.getBrat();
}
一个断言大致等价于:
if (!condition) {
throw new AssertionError();
}
替换这些断言将采用以下验证的形式:
if (rodzic == null)
throw new MyValidationException("rodzic cannot be null");
if (rodzic.rodzic == null)
throw new MyValidationException("rodzic.rodzic cannot be null");
return rodzic.getBrat();
请注意,投掷 anException
和 an Error
- Exception
s 是为了在更远的地方被捕获和处理,而Error
s 表示您无法恢复的情况。例如,MyValidationError
如果失败的检查不可恢复,您可能会考虑定义和使用 a。
public Wezel<Wartosc,Indeks> getWujek()
{
if(rodzic == null) { // Root node has no uncle
throw new Exception("Root node has no uncle");
}
if(rodzic.rodzic == null) {
throw new Exception("Children of root have no uncle");
}
return rodzic.getBrat();
}