对于具有类似输入检查逻辑的方法的类(例如,具有许多方法的自定义多维数组,所有这些都检查给定的坐标是否在数组限制内),我创建了一个单独的抛出运行时异常的私有检查器,以及公共检查器,它只返回一个布尔值,指示变量是否可用于此类方法。这是一个例子:
public class Foo {
public void doStuff(Variable v) {
checkVariableUnsafe(v);
... // do stuff
}
private void checkVariableUnsafe(Variable v) throws InvalidVariableException {...}
public boolean checkVariable(Variable v) {
try {
checkVariableUnsafe(v);
return true;
} catch (InvalidVariableException e) {
return false;
}
}
}
使用它是否可以,或者是否有一些我看不到的垮台?在这种情况下常用的模式是什么?
答案 0 :(得分:3)
对于有效性预测和实际验证使用相同的代码并不是一个好主意,它只是 正确的想法。因为第一条诫命是不要重复自己!,当然你应该将检查提取到自己的方法中。所以这正是我通常做的事情。
答案 1 :(得分:2)
通常建议避免使用正常程序流的异常。如果您不想在此处讨论that issue,如果您想遵循该建议,那么您可以将实际进行检查的逻辑放入公共checkVariable
方法中,并使用私有checkVariableUnsafe
方法调用{ {1}}如果返回false则抛出异常。
我认为您的问题中没有足够的背景来明确评论您创建的API的适当性,但我看不出任何内在错误。
答案 2 :(得分:1)
这是一个非常好的做法。我只使用标准IllegalArgumentException
而不是自定义标准。
答案 3 :(得分:0)
我认为这是不必要的复杂。如果您只是检查传递给方法的传入参数,我只需在检查中编程,如果失败则抛出IllegalArgumentException
,然后继续。我反对任何对我施加如此冗长的,所谓的模式的人。
我更喜欢Spring的绑定和验证API,但这不是你在这里得到的。您提出的复杂性似乎并没有给我带来任何好处。