我想使用Java 8来检查对象的所有字段是否为空。尝试使用here中提到的不同方法,但我希望使用Java 8功能来完成。
例如:
class person{
String name;
Long id;
//getter & setter
}
Person person = new Person();
List<Person> personList = new ArrayList<>();
personList.add(person);
我想仅在id和name不为NULL时才将person添加到列表中。因为,Person有超过10个字段,我不想空检查每个字段并添加到列表中。在这里,我从DB操作中设置ResultSet中的那些字段。
答案 0 :(得分:6)
假设您在编译时知道所有字段,最好的解决方案是明确检查每个字段。对此任务使用反射会增加不必要的运行时开销。但是,为了节省一些精力,你可以在类本身上编写一个函数来处理这个检查。
class Person {
String name;
Long id;
// constructor, getters, and setters
public boolean isEmpty() {
return (this.name == NULL && this.id == NULL);
}
}
然后你的身体代码可能如下所示:
Person person = new Person();
if (!person.isEmpty()) {
personList.add(person);
}
如果您在运行时之前不知道所有字段,则需要按this stackoverflow answer所述使用反射。
答案 1 :(得分:1)
如果您愿意使用外部包,则可以在方法的setter或类的构造函数上使用Lombok @NonNull注释。这将生成检查代码,当有人尝试将值设置为NullPointerException
时,该代码将导致null
。基本上,Lombok生成锅炉板检查代码。您只需添加注释(或10)。
在创建对象时发生异常通常比以后遇到它更好(即你可以捕获并适当地处理它)。
答案 2 :(得分:0)
反思很好,但成本很高。
这里最好的方法是为对象添加一个强制执行null检查方法的接口。在实现的空检查方法内部,您将添加逻辑以查看项属性是否为空。
如果你的心脏被反思,除非你不知道你收到的字段,否则你不应该这样做,那么这个问题在这里有一些答案What is the best way to know if all the variables in a Class are null?