当前位置: 首页 > 知识库问答 >
问题:

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

卢景澄
2023-03-14

我想检查一个对象的所有字段是否为null,或者是否使用Java 8。尝试了这里提到的不同方法,但我希望使用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添加到列表中。因为这个人有10多个字段,所以我不想对每个字段进行空检查并添加到列表中。在这里,我从DB操作的ResultSet设置这些字段。

共有3个答案

令狐增
2023-03-14

反射很好,但代价很高。

这里最好的方法是为对象添加一个接口,强制执行空检查方法。然后,在已实现的空检查方法中,您将添加逻辑以查看项目属性是否为空。

如果你一心想着反思,除非你不知道你收到的字段,否则你不应该这样做,那么这个问题在这里有一些答案什么是最好的方法来知道一个类中的所有变量是否为空?

卫英悟
2023-03-14

如果您愿意使用外部包,可以在方法的setter或类的构造函数上使用Lombok@NonNull注释。这将生成检查代码,当有人试图将值设置为null时,将导致null点异常。从本质上讲,Lombok生成锅炉板检查代码。只需添加注释(或10)。

在创建对象时发生异常通常比以后遇到异常要好得多(即,您可以捕获它并适当地处理它)。

夔博
2023-03-14

假设您在编译时知道所有字段,最好的解决方案是显式检查每个字段。对此任务使用反射会增加不必要的运行时开销。然而,为了节省一点精力,您可以在类本身上编写一个函数来处理此检查。

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);
}

如果您直到运行时才知道所有字段,则需要使用此stackoverflow答案所描述的反射。

 类似资料:
  • 问题内容: 我想在Swing中检查用户名和密码。 该检查适用于用户名,但不适用于JPaswordfield。我正在发布相关代码: 问题答案: 非常简单地获取文本,使用该文本返回文本的a,然后简单地获取数组的长度并检查它是否等于0:

  • 问题内容: 如何检查Oracle中所有字段是否唯一? 问题答案: 如果它们的出现次数大于一(即它们不是唯一的),这将返回所有myColumn值以及它们的出现次数。 如果此查询的结果为空,则此列中具有唯一值。

  • 我正在将带有用户信息的对象从客户端发送到我的服务器: 我害怕一个“坏用户”,试图黑我的系统修改客户端,就像这样: 然后,如果我在服务器中得到这个对象,并更新数据库,用户就会很有名,而且是溢价的。 在服务器端,我只需要字段“name”、“username”、“gender”和“avatar”。 如果对象“NewUserData”有其他意外的字段,我如何签入node.js? 注意:我正在寻找一个通用的

  • 问题内容: 在Java中,数字类型都从Number衍生而来,所以我会使用 什么是python等效项? 问题答案: 测试您的变量是否是的实例: 这将使用ABC,并且将适用于所有内置的数字类,并且如果它们值得使用,则也适用于所有第三方类(已注册为ABC的子类)。 但是,在许多情况下,您不必担心手动检查类型- Python是鸭子类型的,通常可以混合使用一些兼容的类型,但是当某些操作没有意义时()它会阻止

  • 问题内容: 我试图得到: 在我自己的脚本中,我以前只是使用它,因为我从来不需要作为属性: 因此,对于第二个对象,我想出了以下方法作为一种快速解决方案-大部分都能奏效。;) 问题是,这取决于浏览器是否强制执行只读属性,而并非所有人都这样做。 有没有好的替代品? 问题答案: 这可能很有趣: 它是DOM Level2的一部分。 更新2 :这是我在自己的库中实现它的方式:(以前的代码在Chrome中不起作

  • 我有一个对象,我想检查这个对象或嵌套字段是否为空。我想打印这个网状字段,但我应该检查某个级别是否为空,否则我会得到空指针异常。 我知道我可以做到: 但时间太长了。你知道更好的检查方法吗?