如何解决DiffUtil.ItemCallback - 定义为伴随对象还是类?
我目前正在通过优达学城的 Kotlin Android 开发者计划学习 Kotlin。有两个示例应用程序使用 DiffUtil.ItemCallback,但以不同的方式声明它。两个示例应用程序都使用 ListAdapter,但是一个像这样声明 DiffUtil:companion object DiffCallback : DiffUtil.ItemCallback<MarsProperty>()
而另一个是这样的:class SleepNightDiffCallback: DiffUtil.ItemCallback<SleepNight>()
两个 DiffUtils 都作为参数传递给 ListAdapter,唯一的区别是在类实现的情况下,它必须被初始化:
class PhotoGridAdapter : ListAdapter<MarsProperty,PhotoGridAdapter.ViewHolder>(DiffCallback)
class SleepNightAdapter : ListAdapter<SleepNight,SleepNightAdapter.ViewHolder>(SleepNightDiffCallback())
这些示例应用程序之间的唯一区别是,一个从 Internet 下载并显示图像(一个使用 PhotoGridAdapter),而另一个显示来自数据库的数据,因此 我的问题是:与另一种实现相比,首选是一种实现吗?它们之间是否存在性能差异?
解决方法
这可能是一个见仁见智的问题。我的是回调应该是 object
或匿名对象,而不是 companion object
。
它所做的只是比较两个对象的属性。它不必持有任何状态。因此,它是一个单例 object
而不是您必须实例化的 class
是有意义的。无论是将其定义为命名的单例 object
还是将其定义为分配给属性的匿名对象,在传达意图方面都没有太大区别。
但是将它设为 companion
对我来说没有意义。它已经嵌套并具有名称。 companion
所做的只是建议您应该直接调用它的函数,并且名称 PhotoGridAdapter
也应该被视为回调。例如,它使您能够将名称 PhotoGridAdapter
作为其 DiffUtil 回调传递给其他某个适配器,这是无意义的。它可能有意义的唯一原因是,如果您还想将其用作比较项目的实用程序,那么您可以直接调用 PhotoGridAdapter.areContentsTheSame
之类的函数。不过,我认为这不太可能。通常,回调函数的内容要么像传递 equals()
这样非常琐碎,要么非常特定于更新显示列表的性质。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。