gpt4 book ai didi

generics - 有没有办法要求泛型类型成为 Kotlin 中的数据类?

转载 作者:IT老高 更新时间:2023-10-28 13:40:03 27 4
gpt4 key购买 nike

以下内容不起作用,但希望能帮助您理解我的意思:

class Example<T : DataClass>

如果您想知道我想要完成什么,这是我想到的一个例子:

class Repository<T> where T : Entity, // Entity defines mutable property 'id'
T : DataClass {

// assume there is a map here

fun add(obj: T) {
val copy = obj.copy(id = generateID())
map.put(copy.id, copy)
}

}

或者有没有更好的方法来完成我想做的事情?

最佳答案

我觉得你真正想要的是 T 应该能够用一个新的 ID 复制自己,并拥有一个 ID。不一定是数据类。所以你可以只使用一个接口(interface)来定义它。

例如:

interface CopyableWithId<out T> where T: CopyableWithId<T> {
fun copy(newId: Long): T
val id: Long
}

data class BarBaz(override var id: Long, var name: String): CopyableWithId<BarBaz> {
override fun copy(newId: Long): BarBaz = copy(id = newId)
}

class Repository<T> where T : CopyableWithId<T>{

val map: MutableMap<Long, CopyableWithId<T>> = HashMap()

fun add(obj: T) {
val copy = obj.copy(generateID())
map.put(copy.id, copy)
}

private fun generateID(): Long {
return 1L
}
}

关于generics - 有没有办法要求泛型类型成为 Kotlin 中的数据类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37644132/

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