Java 是否可以检查接收的字段是否为空或空,而不使用If

Java 是否可以检查接收的字段是否为空或空,而不使用If,java,if-statement,null,Java,If Statement,Null,我正在收到字段列表。大约有60块地 从那个时起,我必须检查50个字段是否为null或空,若不是,那个么我还必须将它们添加到DB表中 现在我正在使用if条件手动执行它。我只是想这样做,还没有实施 还有更好的选择吗 我的代码: if(ValidateData.checkIsNullOrEmpty(command.getSubscriptionStartYear())){ } if(ValidateData.checkIsNullOrEmpty(command.getSubscriptionPeri

我正在收到字段列表。大约有60块地

从那个时起,我必须检查50个字段是否为null或空,若不是,那个么我还必须将它们添加到DB表中

现在我正在使用if条件手动执行它。我只是想这样做,还没有实施

还有更好的选择吗

我的代码:

if(ValidateData.checkIsNullOrEmpty(command.getSubscriptionStartYear())){

}
if(ValidateData.checkIsNullOrEmpty(command.getSubscriptionPeriod())){

}
if(ValidateData.checkIsNullOrEmpty(command.getExpectedArrivalTimeOfIssues())){

}
.....
.....

if(ValidateData.checkIsNullOrEmpty(command.getMaxNoOfClaims())){

}
这里的
命令
是从源代码接收数据的类

这里的
ValidateData
是一个

它的方法定义是:

public static boolean checkIsNullOrEmpty(Integer arg){
    if(arg != null) return true;
    return false;
}

public static boolean checkIsNullOrEmpty(String arg){
     if(!arg.trim().equals("") || !arg.trim().equals(" ") || arg.trim() != null) return true;
     return false;
}

如果有人向我提供指导或建议,是否有更好的选项可用???

创建如下函数:

public static bool AllNull(object... something)
{
    for(var v :something)
       if(v!=null){
         if(v instanceof Integer)
           // do integer validation
       }else
         //Err msg
}
if (AllNull(obj1, obj2, obj3, obj4, obj5, obj6))
{
    // ...
}
那么你可以这样称呼它:

public static bool AllNull(object... something)
{
    for(var v :something)
       if(v!=null){
         if(v instanceof Integer)
           // do integer validation
       }else
         //Err msg
}
if (AllNull(obj1, obj2, obj3, obj4, obj5, obj6))
{
    // ...
}
如果你想具体一点,可以将字符串和整数分开,并为你需要的每种类型创建一个单独的函数

编辑 正如我从你的评论中了解到的,你不知道

varargs对于任何需要处理 对象数量不确定。一个很好的例子是String.format


如果您可以编辑命令,您可以用@NotNull标记每个要检查为null的字段,然后使用java reflect api获取所有标记为@NotNull的字段,并检查某些字段是否为null

我认为解决您的问题的最佳解决方案是使用java reflect。 下面是通过Java Reflect验证实例所有字段的示例代码。 例如,我有一个对象PojoObj的实例(pojo)

PojoObj pojo = new PojoObj("one1", 2, null, 4, "five", "Six");
通过Java Reflect验证所有字段

Class<PojoObj>  aClass = PojoObj.class;
      Field[] fields = aClass.getDeclaredFields();
      for(Field field : fields) {
          Object value = field.get(pojo);
          Object type = field.getType();
          if(value == null) {
              System.out.println(field.getName() + " is null");
          } else {
              System.out.println(field.getName() + " is instanceof " + type + " and value = " + value);
          }
      }

使用
command
的类代码会很有帮助,使用反射调用所有get***,然后调用您的validate方法如何?另外,如果您可以尝试使用Apache的StringUtils.isEmpty和/或StringUtils。isBlank@mprabhat当类只用于验证时,使用反射似乎有点苛刻,不是吗?不是真的,OP想要一种更通用的方法,而不是在其逻辑中添加新的if代码,但这里有些是整数,有些是字符串。那么如何应对呢?@user3145373ツ 看看我上次的编辑。使用object,而不是像使用Lambda那样使用integer/stringI,但仍然需要手动将每个变量放入数组中。另外,如果添加变量,还必须编辑代码。在函数中,什么是
params
?@ortis是的,但如果添加了字段,则已经编辑了代码:)但是如果变量值不为null,如何将变量值设置为其他目标变量?