假设我有两个数据类DataClass1
和DataClass2
,其中DataClass2
与DataClass1
相同,只是缺少第一个变量。
data class DataClass1(
val entry0: Any,
val entry1: Any,
...
val entryN: Any
)
data class DataClass2(
val entry1: Any,
...
val entryN: Any
)
字符串
假设我有dc1
作为dataClass1的一个示例,并希望获得相应的dataClass2.version(即“删除”entry0
)。
dc2 = DataClass2(
val entry1 = dc1.entry1,
val entry2 = dc1.entry2
)
型
但是,对于条目数量可变的情况,有没有办法做到这一点呢?
2条答案
按热度按时间b1zrtrql1#
如果你想把字段从一个类Map到另一个类来帮助数据传输,那么动态地这样做是一个坏主意。
相反,一个更好的选择是在类上创建一个方法,让它决定如何转换为另一种类型。(这是一个Java代码的例子,我不是很精通Kotlin)
字符串
hxzsmxv22#
我同意@0x150和@broot关于这种系统设计的脆弱性的警告。
我假设dc 1不是你的,dc 2在你的控制之内。
在评论中,你有没有发现@broot提到了扩展函数。这些函数的神奇之处在于你可以将它们应用到你无法控制的类(比如dc 1)。
我也喜欢broot的mapstruct的建议,但是如果想要另一种解决方案,它是一种反射,但是通过序列化。
1.选择Object <> JSON序列化库,例如Jackson
1.将您无法控制的类(
dc1
)序列化为JSON(或Node map)1.现在确定哪个是目标类。您不清楚这是否是众所周知的,例如
dc2
,或者这是否是问题的一部分。如果您需要进行匹配,那么也许您可以使用JSON中的键集来完成此操作1.然后,通过将JSON格式化来创建
dc2
的示例,之前已使用@JsonIgnoreProperties(ignoreUnknown = true)
或序列化库的等效项注解了dc2
这工程
字符串