作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
以下内容不起作用,但希望能帮助您理解我的意思:
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/
我是一名优秀的程序员,十分优秀!