Java 是否可以检查接收的字段是否为空或空,而不使用If
我正在收到字段列表。大约有60块地 从那个时起,我必须检查50个字段是否为null或空,若不是,那个么我还必须将它们添加到DB表中 现在我正在使用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
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,如何将变量值设置为其他目标变量?