ale*_*pfx 5 android interface kotlin android-recyclerview readonly-variable
我有这个实用程序接口由 RecyclerView 的 ViewHolder 来实现,它会触发 UI 事件。
interface ObservableMvpViewHolder<V> {
val listeners: List<V>
fun registerListener(listener:V)
fun unregisterListener (listener: V)
}
Run Code Online (Sandbox Code Playgroud)
该listeners属性就像一份合同,因此我希望客户有义务声明它以存储观察者。
但是当我实现这个接口时,我必须声明这个属性的 getter:
class AddItemViewHolderHolder(override val containerView: View) : ViewHolder(containerView), LayoutContainer, ObservableMvpViewHolder<AddItemViewHolderHolder.Listener> {
override val listeners: List<Listener>
get() = listeners
Run Code Online (Sandbox Code Playgroud)
我不想这样做是为了避免将此属性暴露给外部。
我是 Kotlin 新手,有没有一种方法可以做到这一点而无需声明抽象类?
小智 2
正如您所说,接口是让每个人阅读的合同,因此,隐藏属于该合同一部分的属性是没有意义的。
它们(接口)可以具有属性,但这些属性必须是抽象的或提供访问器实现。
正如您所说,您可以使用抽象类来实现此行为:
abstract class ObservableMvpViewHolder<V> {
private val listeners : List<V> = emptyList()
abstract fun registerListener(listener:V)
abstract fun unregisterListener (listener: V)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6289 次 |
| 最近记录: |