gpt4 book ai didi

java - JSON 序列化空指针不使用单行处理如果

转载 作者:行者123 更新时间:2023-12-01 18:16:17 26 4
gpt4 key购买 nike

我不明白这里发生了什么..我有课:

public abstract class ReservationDTO {

private String currency;
private Double price;


public abstract ReservationType getType();

public String getCurrency() {
return this.currency;
}

public void setCurrency(String currency) {
this.currency = currency;
}

public Double getPrice() {

// if (this.price != null) {
// return Math.ceil(this.price);
// }
// return null;

return (this.price != null ? Math.ceil(this.price) : this.price);

// return this.price;
}

public void setPrice(Double price) {
this.price = price;
}

}

还有一个子类:

public class CarReservationDTO
extends ReservationDTO {

private String carModel;

public String getCarModel() {
return this.carModel;
}

public void setCarModel(String carModel) {
this.carModel = carModel;
}

@Override
public ReservationType getType() {
return ReservationType.CAR;
}

}

有些元素已设定价格,有些则没有。这就是我对 getPrice() 方法进行一些更改的原因。

首先我有:

public Double getPrice() {
if (this.price != null) {
return Math.ceil(this.price);
}
return this.price;
}

这工作得很好,如果价格在那里,那么它会在没有小数的 json 中解析(因为 Math.ceil)。如果为 null,则返回 null。

但后来我想使用单行 if:

public Double getPrice() {
return (this.price != null ? Math.ceil(this.price) : this.price);
}

那是:

无法写入 JSON:(是 java.lang.NullPointerException)(通过引用链:com.milware.dto.CollectionContainer["items"]->java.util.ArrayList[0]->com. milware.dto.CarReservationDTO["价格"]);嵌套异常是 org.codehaus.jackson.map.JsonMappingException: (was java.lang.NullPointerException) (通过引用链: com.milware.dto.CollectionContainer["items"]->java.util.ArrayList[0]-> com.milware.dto.CarReservationDTO[“价格”])
在org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:194)
如果我将该行更改为:

    return (this.price != null ? Math.ceil(this.price) : null);

它有效,但我不喜欢最后一个“null”..

我不明白为什么它首先会抛出该异常..

最佳答案

一切都与类型有关。三元表达式的类型

(this.price != null ? Math.ceil(this.price) : this.price)

在编译时根据其第二个和第三个操作数的类型静态确定。在本例中,这些操作数类型是 double 和 java.lang.Double。借助自动[un]装箱功能,其中之一可以转换为另一个,并且编译器会选择double。然而,当 this.price 结果包含 null 时,生成的自动拆箱会失败,并出现 NullPointerException

您应该能够使用以下表达式在一行中完成此操作:

(this.price != null ? Double.valueOf(Math.ceil(this.price)) : this.price)

这减轻了类型的不确定性,防止 Java 在 this.pricenull(或根本)时尝试拆箱。

就其值(value)而言,我个人更喜欢带有显式 null 的表单。我发现它更清楚了。

关于java - JSON 序列化空指针不使用单行处理如果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29306202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com