在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"当在网络界面上显示时。
提前致谢!
答案 0 :(得分:1)
排序。请注意,Java区分基元和对象(即int
和Integer
不相同。如果您有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();
}
(0
与private 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