Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查对象中的所有变量是否为空?_Java - Fatal编程技术网

Java 如何检查对象中的所有变量是否为空?

Java 如何检查对象中的所有变量是否为空?,java,Java,JSON响应: { "id": "", "status": "", "Date": "", "Name": "" } 当我尝试使用对象映射器将其映射到类时。 类的名称是Demo,其字段在json响应中相同。 它映射为: Demo(id=, status=, Date=, Name=) 响应中大约有10-15个变量。 我

JSON响应:

{
  "id": "",
  "status": "",
  "Date": "",
  "Name": ""
}
当我尝试使用对象映射器将其映射到类时。
类的名称是Demo,其字段在json响应中相同。
它映射为:

Demo(id=, status=, Date=, Name=)
响应中大约有10-15个变量。
我想知道Demo对象的所有变量是否都是空的。

使用

JsonNode node = mapper.readTree(jString);

node.isNull();
您将得到节点是否为空 使用

您可以使用

JsonNode node = mapper.readTree(jString);

node.isNull();
您将得到节点是否为空 使用

您可以验证JsonNode的内容,纯Java解决方案1可以使用反射。这里是一个非常简单的实现,主要是为了说明这个想法(不完整,假设字段是
String
,异常处理较差(没有):

例如,可以通过添加更多类型、在字段上使用注释等方式对其进行改进

1:问题仅标记为
java

var
是在java10中引入的;如果使用以前版本的Java,请使用具体类型(
for(Field…
String value…
),纯Java解决方案1可以使用反射。这里是一个非常简单的实现,主要是为了说明这个想法(不完整,假设字段是
String
,异常处理较差(无)):

例如,可以通过添加更多类型、在字段上使用注释等方式对其进行改进

1:问题仅标记为
java


var
是在Java10中引入的;使用具体类型(
for(Field…
String value…
)如果首先使用早期版本的Java

,那么您使用的是什么JSON解析器,代码在哪里?请参阅和。只是为了了解您的需求:为什么您想知道这些?您知道,如果进行此类检查是您工作的一个重要方面,那么可能:使用对象映射器。相反,请将响应转换为映射(例如)例如,或者是类似于JsonNode的东西,正如其中一个答案中所指出的。对象映射器的目的是为您提供类型安全性。在使用反射时,您放弃了这种安全性。更糟糕的是:您花费了大量CPU周期,却什么都没有。首先,您使用的是什么JSON解析器,您的代码在哪里?请参阅和。为了理解您的要求记住:你为什么想知道?你知道,如果做这样的检查是你工作的一个重要方面,那么也许:使用对象映射器。相反,将响应转换为映射,例如,或者,像一个JsonNode之类的东西,正如在一个答案中指出的那样。对象映射器的目的是给你类型安全性。你放弃了当使用反射时。更糟糕的是:你花费了大量的CPU周期,却一无所获。谢谢,它起作用了。在for循环中将类型var字段更改为field字段。只是说:反射当然起作用,但取决于上下文,首先使用反射将JSON转换为一个独特的Java类,然后使用反射以某种方式“反转”该操作以访问所有字段。谢谢,它成功了。在for循环中将类型var field更改为field field。只是说:反射当然可以工作,但取决于上下文,首先使用反射将JSON转换为不同的Java类,然后使用反射以某种方式“反转”是一种相当奇怪的方法我同意,使用“原始”JsonNode类比先进行映射,然后使用反射返回到字段要好。我同意,使用“原始”JsonNode类比先进行映射,然后使用反射返回到字段要好。
public static boolean isEmpty(Demo demo) throws IllegalArgumentException, IllegalAccessException {
    for (var field : Demo.class.getDeclaredFields()) {
        if (field.getType() == String.class) {
            var value = (String) field.get(demo);
            if (value != null && !value.isEmpty()) {
                return false;
            }
        }
    }
    return true;
}