Java 如何管理版本化对象构造函数?

Java 如何管理版本化对象构造函数?,java,json,gson,Java,Json,Gson,我们目前正在使用java进行一个项目,在该项目中我们公开了restapi。 由于我们正在使用OO语言并以json格式导出内容, 我们搜索了一个库,该库支持将对象转换为具有版本控制支持的json 我们决定使用gson,因为它为版本控制提供了一个简单的注释 我们面临的问题是API中的一个中断,其中删除了一些字段(比如说板块)并添加了另一个字段(比如驱动程序),它们是相同类型的。 在签名相同的情况下,我们如何构建构造函数 我提出的解决方案如下: Car car = new Car(null, driv

我们目前正在使用
java
进行一个项目,在该项目中我们公开了restapi。
由于我们正在使用OO语言并以
json
格式导出内容,
我们搜索了一个库,该库支持将对象转换为具有版本控制支持的
json

我们决定使用
gson
,因为它为版本控制提供了一个简单的注释

我们面临的问题是API中的一个中断,其中删除了一些字段(比如说板块)并添加了另一个字段(比如驱动程序),它们是相同类型的。
在签名相同的情况下,我们如何构建构造函数

我提出的解决方案如下:

Car car = new Car(null, driver);
汽车:

为了创建v2
Car
,我只需要driver字段,我将按如下方式执行它:

Car car = new Car(null, driver);

我不是一个过零的爱好者(特别是在CtoS),有没有更好的更优雅的方式?

你考虑过使用工厂吗?我认为工厂模式符合你的要求。我会说是建筑商,但是的,这是一个设计问题。从类中提取构造将是,imho,最好的解决方案。维护您的解决方案非常困难。也许每个版本最好有一个单独的Car类,比如CarV1、CarV2,在restapi中使用它们并进行字段复制。我认为@IQV基于工厂的解决方案是一个不错的选择。依我看,构建器可能也不错,但在编译时,构建器在运行时之前,在正确实例化目标类型实例方面很弱。另一种解决方案是隐藏公共构造函数(这几乎总是好的),并创建静态工厂方法,如
carV1(plate)
carV2(driver)
,这些方法只会将参数委托给正确的构造函数参数。对于静态工厂方法,您还可以通过为方法指定有意义的名称来应用一些语义,从而封装隐藏的内容。我认为管理不同的对象版本是最糟糕的解决方案,因为我会有大量代码重复。这样,我只需要编写适当的构造函数。我会尝试在这里使用一个工厂,我想。。。