gpt4 book ai didi

java - 使用枚举将对象属性映射到另一个对象属性?

转载 作者:行者123 更新时间:2023-12-01 10:04:11 24 4
gpt4 key购买 nike

只是想知道是否有人可以帮助我解决问题。

基本上我有两个来自不同地方的对象,例如两个不同的汽车类别。我想使用我创建的映射器将类 carA 的属性映射到类 carB 的属性。这在大多数情况下都很简单,如下所示。

public carB carMapper(carA car){

carB carb = new carB();

carb.weight = car.weight
carb.size = car.size


}

但是,在某些情况下,CarA 类以与 CarB 略有不同的格式存储相应的值,即,对于福特汽车的型号,carA 将其存储为 Frd,而 carB 将其存储为 Ford。有没有一种简单的方法(也许使用枚举或其他东西)可以正确映射这些?我知道我能做到

 if (carA.model = frd)
then carB.model = Ford

等等,但我不想对每种情况都这样做......我知道 carA 和 carB 的可能值,我可以以某种方式使用枚举来帮助我吗?

谢谢。

最佳答案

看来您正在寻找类似于映射构造函数的东西。已经有一个众所周知的概念叫做 copy constructor它可以帮助您创建给定类的对象的副本。在您的情况下,您希望在给定另一个类的实例的情况下创建某个类的实例。

我认为枚举不能(或应该)用于此目的,主要是因为它们不是为此目的而设计的。

尚不清楚这样的构造是否非常有用(并且通用)。例如,您想在给定汽车的情况下创建一只乌龟吗?它们之间没有太多共同点,因此提供这样的设施似乎没有什么值(value)。您将 CarACarB 作为的示例,但由于它们是两个不同的类,因此应假设它们完全不同,任何共性都应被假定为纯属巧合。

如果您确实想要外部化此操作,那么您可以考虑以 JSON 或 XML 等格式对映射进行某种序列化,然后可以想象对该格式进行通用处理以创建涉及类的对象:

<map from="CarA" to="CarB">
<property>model</property>
<override>Ford</override>
</map>

在本例中,您创建一个 CarB 实例,并根据映射反射性地设置其上的字段。您可以假设所有其他字段都被逐字复制。当然,您需要清除规范的所有细节才能使其具有普遍用途。

否则,我不认为您提到的 if-else 结构有什么问题,因为它的用处显然是有限的。

关于java - 使用枚举将对象属性映射到另一个对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36576381/

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