可以使用此模式进行值检查吗?

时间:2011-07-03 13:01:22

标签: java exception variables validation

对于具有类似输入检查逻辑的方法的类(例如,具有许多方法的自定义多维数组,所有这些都检查给定的坐标是否在数组限制内),我创建了一个单独的抛出运行时异常的私有检查器,以及公共检查器,它只返回一个布尔值,指示变量是否可用于此类方法。这是一个例子:

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;
        }
    }
}

使用它是否可以,或者是否有一些我看不到的垮台?在这种情况下常用的模式是什么?

4 个答案:

答案 0 :(得分:3)

对于有效性预测和实际验证使用相同的代码并不是一个好主意,它只是 正确的想法。因为第一条诫命是不要重复自己!,当然你应该将检查提取到自己的方法中。所以这正是我通常做的事情。

答案 1 :(得分:2)

通常建议避免使用正常程序流的异常。如果您不想在此处讨论that issue,如果您想遵循该建议,那么您可以将实际进行检查的逻辑放入公共checkVariable方法中,并使用私有checkVariableUnsafe方法调用{ {1}}如果返回false则抛出异常。

我认为您的问题中没有足够的背景来明确评论您创建的API的适当性,但我看不出任何内在错误。

答案 2 :(得分:1)

这是一个非常好的做法。我只使用标准IllegalArgumentException而不是自定义标准。

答案 3 :(得分:0)

我认为这是不必要的复杂。如果您只是检查传递给方法的传入参数,我只需在检查中编程,如果失败则抛出IllegalArgumentException,然后继续。我反对任何对我施加如此冗长的,所谓的模式的人。

我更喜欢Spring的绑定和验证API,但这不是你在这里得到的。您提出的复杂性似乎并没有给我带来任何好处。

相关问题