当前位置: 首页 > 面试题库 >

Java如何使用反射检查字段是否已初始化或为默认值?

祁正阳
2023-03-14
问题内容

所以,应该是直截了当的问题。

可以说我有一堂课,其中包含很多字段,例如:

String thizz;
long that;
boolean bar;

我怎样才能与反思,看是否领域thizzthatbar已初始化或离开NULL,0和虚假的默认值吗?


问题答案:

您只有7种基本类型和一种引用类型要检查。如果将所有Number类型分组在一起,则只有四个要检查的值。

Object o =
for (Field field : o.getClass().getDeclaredFields()) {
 Class t = field.getType();
 Object v = field.get(o);
 if(t == boolean.class && Boolean.FALSE.equals(v)) 
   // found default value
 else if(t == char.class && ((Character) v).charValue() == 0)
   // found default value
 else if(t.isPrimitive() && ((Number) v).doubleValue() == 0)
   // found default value
 else if(v == null)
   // found default value
}


 类似资料:
  • 问题内容: 我需要使用类似于php的isset函数的东西。我知道php和java截然不同,但是php是我先前类似编程知识的唯一基础。是否有某种方法可以返回一个布尔值,用于确定实例变量是否已初始化。例如… 到目前为止,我遇到了这个问题,当我的程序试图隐藏或删除尚未构造的对象时,出现运行时错误。 问题答案: 假设您对是否已为变量 明确赋值 感兴趣,答案是“不是真的”。但绝对的字段(实例变量或类变量)尚

  • 我想知道是否有一种方法可以检查变量是否已经初始化。例如:

  • 我想知道是否有办法检查变量是否已初始化。例如:

  • 我的班级结构如下: 所有的getter和setter都已定义。我使用Java反射进行如下调用: 现在,在调用它之前,我只设置了,而没有设置。我将这个ClassAObj转换成JSON,发现的默认值设置为,它出现在JSON中。我不希望JSON中出现字段。我该如何避免这种情况? 有趣的是,如果我设置了而不是,那么标签不会出现在JSON中。

  • 问题内容: 我是Hibernate的新手,我正尝试从数据库中获取一些数据。我不想获取完整的数据,而只是一个实体的投影。 问题是,在for循环中,当我获得ID和投影的名称时,它将获得默认值id = 0和name = null而不是id = 7和name =“ Name 8”的记录数据库中的原始实体。你知道是什么原因导致这个问题吗?for循环位于最后一个代码中。 这是学生实体 这是StudentMod

  • 问题内容: 我需要一个ConnectionFactory类型的实例字段。供应商可以做到: 可以将其缩短为一行,如下所示: 有没有办法使用lambda使其更简洁一些?我试过以下内容,但无法编译: 问题答案: 您上一个代码段中的问题是编译器无法猜测 是实现接口SAM的lambda表达式(似乎您首先错过了表达式的括号,但无论如何)。 您可以做的是强制转换lambda,以告知编译器这实际上是您实现的接口的