gpt4 book ai didi

java - 使用构建器模式编码解码不可变对象(immutable对象)的最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:23 24 4
gpt4 key购买 nike

我有一个用 Java 开发的简单的 Restful 服务。我一直在研究一些用于编码/解码 json 的选项。可用的可能方法,jaxb jackson 等,对我来说很新,我正在努力适应它们。我想知道我是否可以得到一些关于什么是最好的方法和技术的建议,特别是考虑到我感兴趣的许多对象我已经实现为不可变的并且我已经使用了构建器模式。所以没有 setter 并且构造函数是私有(private)的。

我看过之前的问题:Jackson + Builder Pattern?发布在计算器上。我正在考虑类似这种方法的方法,尽管获得一些指向有关使用 @JsonDeserialize 的更多资源的指针会很棒

这是我正在考虑的对象类型的一个非常简单的示例

public class Reading {

private final double xCoord;
private final double yCoord;
private final double diameter;
private final double reliability;
private final String qualityCode;


private Reading(Builder builder){
xCoord = builder.xCoord;
yCoord = builder.yCoord;
diameter = builder.diameter;
reliability = builder.reliability;
qualityCode = builder.qualityCode;
}


public static class Builder {
//required parameters
private final double diameter;
//optional parameters
private double xCoord = 0.0;
private double yCoord = 0.0;
private double reliability = 1.0;
private String qualityCode;


public Builder (double diameter){
this.diameter = diameter;
}

public Builder reliability(double val){
reliability = val;
return this;
}

public Builder qualityCode(String qualityCode){
this.qualityCode = qualityCode;
return this;
}

public Builder coordinates(double xCoord, double yCoord){
this.xCoord = xCoord;
this.yCoord = yCoord;
return this;
}

public Reading build(){
return new Reading(this);
}

}

public double getXCoord() {return xCoord;}

public double getYCoord() {return yCoord;}

public String getQualityCode() {return qualityCode;}

public double getDiameter() { return diameter;}

public double getReliability() {return reliability; }

编码此对象没有问题,但解码似乎并不直接。是否还支持省略空对象值的条目?

最佳答案

您可以这样做:(仅实现 getter 并使用 XmlAccessType.FIELD)

@XmlAccessorType(XmlAccessType.FIELD)
public class CreditCardVO implements Serializable {

private Long ccNumber;
private String ccName;


public CreditCardVO(Long ccNumber, String ccName) {
this.ccNumber = ccNumber;
this.ccName = ccName;
}


private CreditCardVO() {
// for JAXB's Magic
}

public Long getCcNumber() {
return ccNumber;
}

public String getCcName() {
return ccName;
}
}

取自http://aniketshaligram.blogspot.com/2010/05/jaxb-immutable-objects.html

关于java - 使用构建器模式编码解码不可变对象(immutable对象)的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6342387/

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