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