如何在Java中验证可选参数

时间:2011-11-14 17:15:29

标签: java

我有一个接受10个参数的方法,其中8个是必需的。要检查8/10是否没有空值,我为每个参数都有一堆if-else语句。

写下这个if-else代码对我来说似乎不太优雅。有更好的方法吗?

谢谢 BC

6 个答案:

答案 0 :(得分:3)

您可以使用类来封装参数。这样,在您的班级中,您可以使用方法检查它们的有效性。

类似的东西:

class MethodParams {
    private String p01;
    private String p02;
    private String p03;
    private String p04;
    private String p05;
    private String p06;
    private String p07;
    private String p08;
    private String p09;
    private String p10;

    // getter & setters

    public boolean validate() {
        // validate parameters here
    }


}

class A {
    public methodWith10(MethodParams mp) {
        if (!mp.validate()) {
            // do something and fail
        }
        // methodWith10 implementation follows...
    }
}

答案 1 :(得分:3)

您可以使用apache commons-lang库来验证输入参数:

Validate.notNull(param, "This param can not be null"); // the message is optional

答案 2 :(得分:1)

Guava的Preconditions.checkNotNull方法对此有好处。

答案 3 :(得分:0)

我承认以下是先进的,它需要使用第三方罐子,但看看OVal:

4.2.2. Declaring constraints for method parameters

例如:

@Guarded 
public class BusinessObject
{
  public void setName(@NotNull String name)
  {
    this.name = name;
  }
  ...
}

答案 4 :(得分:0)

如果嵌套的if..else语句困扰你,你可以一次检查一个参数,并在第一个参数失败后立即返回。

所以,像这样:

if (firstParm == null) {
  err = "firstParam is required.";
  return false;
}

if (secondParam == null {
  err = "secondParam is required.";
  return false;
}

// If we made it this far, we have all the required parameter values

当然,您注意到此方法的缺点,即调用者在传入有效的第一个参数之前不会知道第二个参数是必需的。但是,这种类型的实现很常见。

为了改善这一点,你可以更喜欢这样:

err = "";
boolean ok = true;

if (firstParm == null) {
  err = "firstParam is required.";
  ok = false;
}

if (secondParam == null {
  err = err + " secondParam is required.";
  ok = false;
}

if (! ok) {
  return false;
}

// If we made it this far, we have all the required parameter values

答案 5 :(得分:0)

这对你有用吗?而不是“每个参数的一堆if语句”,每个参数都有一个三元运算:

  public static void foo(String a, String b, String c, String d, String e, String f, String g, String h, String i, String j) {
    int validCount = 0;
    validCount += (a != null) ? 1 : 0;
    validCount += (b != null) ? 1 : 0;
    validCount += (c != null) ? 1 : 0;
    validCount += (d != null) ? 1 : 0;
    validCount += (e != null) ? 1 : 0;
    validCount += (f != null) ? 1 : 0;
    validCount += (g != null) ? 1 : 0;
    validCount += (h != null) ? 1 : 0;
    validCount += (i != null) ? 1 : 0;
    validCount += (j != null) ? 1 : 0;

    if(validCount < 8)
      System.out.println("Invalid");
    else
      System.out.println("Valid");
  }