【发布时间】:2020-07-20 21:56:49
【问题描述】:
我是 Java 新手。我写了一个名为QueryCondition的类,用来表示SQL命令中的查询条件,比如id > 5、bankBalance < 100等。显然,像这样的查询条件需要有两个操作数,所以在QueryCondition 的构造函数我检查空操作数或空操作数,如果是这种情况则抛出异常。这是好的做法吗?
public class QueryCondition
{
public enum Comparator
{
smallerThan,
smallerThanOrEqualTo,
largerThan,
largerThanOrEqualTo,
equals,
doesNotEqual
}
private final String _leftOp;
private final String _rightOp;
private final Comparator _comp;
public QueryCondition( String leftOperand, Comparator compare, String rightOperand ) throws Exception
{
if( leftOperand == null || leftOperand.isEmpty() ||
rightOperand == null || rightOperand.isEmpty() )
{
throw new Exception("QueryCondition cannot be constructed with empty operands.");
}
_leftOp = leftOperand;
_rightOp = rightOperand;
_comp = compare;
}
}
【问题讨论】:
-
这取决于你想在抛出异常时如何处理它。您是否打算在调用 QueryCondition 类的地方处理它?还是在适当的位置处理错误并从那里响应用户会更好吗?这些是你必须自己考虑的事情。
-
根据你想要做什么,你总是可以设置它们的默认值以防它们为空而不是抛出
Exception。虽然,如果您想继续处理异常,我建议您创建一个个性化的异常并使用该异常。即QueryException -
@Fullslack.dev 我想让异常向上传播并让它终止程序,因为这会告诉程序员他们使用 QueryCondition 的方式有问题,这应该会有所帮助他们更正了他们的代码。这是好的做法吗?
-
IMO,这是可以接受的。但是,有人可能会争辩说,如果您在上游设置保护措施,以便在实例化查询条件对象之前所需的参数不为空,那么您的情况会更好。如果这与您的输入验证器相关,那么我说 OK。
-
如果你想让异常向上传播,我只能同意 NeoChiri 和 Hulk 继续使用选择的路径。简而言之:是的,这对您的用例来说是一种很好的做法。