Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 可以返回什么类型而不是null?_Java - Fatal编程技术网

Java 可以返回什么类型而不是null?

Java 可以返回什么类型而不是null?,java,Java,我有以下代码: public static <T> T jsonToObject(String json, Class<T> object) { ObjectMapper mapper = new ObjectMapper(); try { return mapper.readerFor(object).readValue(json); } catch (JsonProcessingException e) { e.

我有以下代码:

public static <T> T jsonToObject(String json, Class<T> object) {
    ObjectMapper mapper = new ObjectMapper();
    try {
        return mapper.readerFor(object).readValue(json);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    return null;
}

我该怎么做才能不返回null?

调用者无论如何都必须处理null/缺失的情况,因此最好指定您的方法抛出JsonProcessingException,并在调用者中执行异常处理。然后调用者可以为它需要的类型做任何事情

否则你只会处理同一个问题两次

公共静态T jsonToObjectString json,类对象抛出JsonProcessingException{ ObjectMapper mapper=新的ObjectMapper; 返回mapper.readerForobject.readValuejson; }
调用者无论如何都必须处理null/缺失的情况,所以最好指定您的方法抛出JsonProcessingException,并在调用者中执行异常处理。然后调用者可以为它需要的类型做任何事情

否则你只会处理同一个问题两次

公共静态T jsonToObjectString json,类对象抛出JsonProcessingException{ ObjectMapper mapper=新的ObjectMapper; 返回mapper.readerForobject.readValuejson; } 考虑到:

ObjectReader readerForClass类型-的工厂方法 构造将读取或更新的实例的ObjectReader 指定类型

T readValueString内容,类型引用值类型引用-方法 从给定的JSON内容字符串反序列化JSON内容

因此,该方法返回泛型类型类的实例,因此您可以:

现在,如果结果为空,您将获得一个新实例。

考虑到:

ObjectReader readerForClass类型-的工厂方法 构造将读取或更新的实例的ObjectReader 指定类型

T readValueString内容,类型引用值类型引用-方法 从给定的JSON内容字符串反序列化JSON内容

因此,该方法返回泛型类型类的实例,因此您可以:


现在,如果结果为null,您将获得一个新实例。

您可以返回一个可选的。如果转换成功,那么它将包含一个值,否则为空。我只是想了解一般情况下返回null是否是一种好方法,以及在这种情况下该怎么做。您不希望在Java中返回null,因为当有人试图将方法的返回值分配给var时,它会抛出一个NPE。如果您想处理方法内部的异常,查看Optional可能是您的最佳选择。或者,如果此值不能为null,您可以捕获JsonProcessingException并自己抛出一个NPE。@IgorFlakiewicz和另外一个问题。在Utillty类中创建这样的方法,并在任何地方或更好的地方使用它来为此创建单独的类,这是一个好主意吗?您可以返回一个可选的。如果转换成功,那么它将包含一个值,否则为空。我只是想了解一般情况下返回null是否是一种好方法,以及在这种情况下该怎么做。您不希望在Java中返回null,因为当有人试图将方法的返回值分配给var时,它会抛出一个NPE。如果您想处理方法内部的异常,查看Optional可能是您的最佳选择。或者,如果此值不能为null,您可以捕获JsonProcessingException并自己抛出一个NPE。@IgorFlakiewicz和另外一个问题。在utilly类中创建这样的方法,并在任何地方使用它,或者更好地为此创建单独的类,这是一个好主意吗?
 public static <T> T jsonToObject(String json, Class<T> object) {
    ObjectMapper mapper = new ObjectMapper();
    T instance=null;
    try {
        instance = mapper.readerFor(object).readValue(json);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    if (instance == null) {
        instance = ((Class) ((ParameterizedType) this.getClass().
                getGenericSuperclass()).getActualTypeArguments()[0]).newInstance();
    }
    return instance;
}