我如何用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();
}
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();
}
替换这些断言将采用以下验证的形式:
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();
请注意,抛出Exception
和Error
之间存在区别--Exception
旨在被更进一步地捕获和处理,而Error
则表明您无法恢复。例如,如果无法恢复失败的检查,则可以考虑定义并使用MyValidationError
。