如何使用JAVA 8检查对象的所有字段是否为NULL?

时间:2018-01-04 20:35:20

标签: java java-8

我想使用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中的那些字段。

3 个答案:

答案 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?