扫描Null Proper的对象

时间:2016-02-06 20:05:54

标签: java

在Java中,有没有办法扫描对象的任何/所有null值,并将它们设置为默认值,无论它们的Object类? (Longs,Booleans,Strings等)。

从语法上讲,我想象它会与此类似,或更简单

for(key in obj){
    if(key == null && key.isString()) key.setValue("Undefined"); 
    if(key == null && key.isLong()) key.setValue(000); 
    //so on and so fourth
}

在这种情况下,我不想简单地捕获异常,因为我需要将值设置为" Undefined"当在网络界面上显示时。

提前致谢!

4 个答案:

答案 0 :(得分:1)

排序。请注意,Java区分基元和对象(即intInteger 相同。如果您有int i = 0,则执行{ {1}}会引发异常。如果您有i = null,那么Integer i = 0就可以了。)

Java有可能以简单的方式提供您想要的东西 - 您可以这样做,例如

i = null

等。根据数据的来源(例如,它来自数据库,这些字段可能为空?),这可能就足够了。

编辑:Java具有类级字段的默认值。基本类型的默认值为public class Sample { int i = =1; String = "value"; LocalDateTime time = LocalDateTime.now(); } 0private int i = 0;相同),对于对象,private int i;null与{private String s = null;相同1}})。

否则,如果您正在使用框架(例如Spring,JEE等),那么他们可能会提供一种更好的方法来为您发回的响应设置默认值。

您是否需要专门将其设置为private String s;?默认情况下,JavaScript会将Undefined值视为 falsey (例如null将采用var a = null; if (a) {...} else {...}路径),因此我假设无论显示什么最终用户的信息可以说出else

的内容

如果绝对没有其他方法可以做到这一点,那么它可以完成,但是如上所述,关于基元和对象是不同的,如果你想在构造后扫描一个类并改变一个类上的所有字段,你将有一个相当不那么有趣的时间。

以下代码将获取在类中声明的每个字段(但不在超类中)!并将它们设置为if (!field) { display("Undefined", fieldName); }-1或null,具体取决于类型:

"value"

如果可能的话,我强烈建议寻找一种更简单的方法来做你想做的事。

答案 1 :(得分:1)

您可以像以下一样使用反射用户:

  import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Scanner;

 public class Main {
public static void main(String[] args) throws IllegalArgumentException,  IllegalAccessException, InstantiationException {
 User user=new User("Islam",null);

Field[] fields = user.getClass().getDeclaredFields();
for(Field f : fields){
 f.setAccessible(true);
 if(f.get(user)==null){
     Object val=null;
     if(Number.class.isAssignableFrom(f.getType())){
         val=0;
     }else if(Boolean.class.isAssignableFrom(f.getType())){
         val=false;
     }//complete with other types
     f.set(user, val);

 }
}
System.out.println("user name : "+user.getName());
System.out.println("user age : "+user.getAge());

}

}

class User{
private String name;
private Integer age;
User(){

}
User(String name,Integer age){
    this.name=name;
    this.age=age;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Integer getAge() {
    return age;
}
public void setAge(Integer age) {
    this.age = age;
}


}

答案 2 :(得分:0)

想知道为什么要将它设置为默认值而不抛出异常。由于这里没有清楚地理解用例,你是否尝试使用ConcurrentHashMap?它不允许您的密钥为空。

答案 3 :(得分:0)

我认为您想要做这样的事情,如果是这样,那么Java反射可以帮助您实现目标。

Test: False