我正在做一些关于 android DiffUtil 的事情,我想让它成为通用的。我想在创建类 A 时传递 getter 函数(itemGetter),但是当我在构造函数中声明 itemGetter 的类型时。我不知道如何声明它。()->V 不正确。因为我不能做像 item.itemGetter() 这样的事情 Class T 是关于一个带有 itemGetter 的类
class T() {
val item = ....
fun itemGetter(): String {
return this.item
}
}
class A<T,V>(var item1 :T , var item2:T ,var itemGetter: ()->V){
fun comparing(item1: T,item2:T): Boolean {
return item1.itemGetter()===item2.itemGetter()
}
}
谢谢
更新具体示例
class DiffCallBackUtil<T>(var oldList: ArrayList<T>, var newList: ArrayList<T> ) : DiffUtil.Callback() {
override fun areItemsTheSame(oldi: Int, newi: Int): Boolean {
return oldList[oldi] === newList[newi]
}
}
因为我们检查了 itemsTheSame 需要比较模型 T 中的名称或 ID 或某些实例,因此,我需要将模型 T 中的 getter 作为函数传递给 DiffCallBackUtil。因此,我可以调用oldList[oldi].getName()===newList[newi].getName()