Kotlin开发Android笔记9:Kotlin操作符重载
2016-08-11
Kotin有一些固定数量象征性的操作符,开发中可以在任何类中使用它们。使用方法是:
创建一个方法,方法名为保留的操作符关键字,如此就可以让这个操作符的行为映射到这个方法。重载这些操作符可以增加代码可读性和简洁性。
—操作符表——-
下面是一系列包括操作符和对应方法的表。对应方法必须在指定的类中通过各种可能性被实现。
operator fun equals(other: Any?): Boolean
操作符===和!==用来做身份检查(它们分别是Java中的==和!=),并且它们不能被重载。
例子
Kotlin List是实现了数组操作符的,可以像Java中的数组一样访问List的每一项。除此之外:在可修改的List中,每一项也可以用一个简单的方式被直接设置:
val x = myList[2]
myList[2] = 4
之前的代码中有一个叫ForecastList的数据类,它是由很多其他额外的信息组成的。有趣的是可以直接访问它的每一项而不是请求内部的list得到某一项。
做一个完全不相关的事情,我要去实现一个size()方法,它能稍微能简化一点当前的Adapter:
data class ForecastList(val city: String, val country: String,
val dailyForecast: List<Forecast>) {
operator fun get(position: Int): Forecast = dailyForecast[position]
fun size(): Int = dailyForecast.size
}
它会使我们的onBindViewHolder更简单一点:
override fun onBindViewHolder(holder: ViewHolder,
position: Int) {
with(weekForecast[position]) {
holder.textView.text = "$date - $description - $high/$low"
}
}
当然还有getItemCount()方法:
override fun getItemCount(): Int = weekForecast.size()
----扩展函数中的操作符------
有时我需要去使用扩展函数扩展我们已经存在的类来让第三方的库能提供更多的操作。几个例子,我们可以去像访问List的方式去访问ViewGroup的view:
operator fun ViewGroup.get(position: Int): View = getChildAt(position)
现在真的可以非常简单地从一个ViewGroup中通过position得到一个view:
val container: ViewGroup = find(R.id.container)
val view = container[2]
“`
博客学习来自《《Kotlin for Android Developers》中文翻译》。
相关代码可以查看:https://github.com/antoniolg/Kotlin-for-Android-Developers
学习交流:https://github.com/ldm520/Android_Kotlin_Demo