Kotlin操作符重载(十)
来源:互联网 发布:360问答软件 编辑:程序博客网 时间:2024/06/07 00:15
操作符重载Kotin有一些固定数量象征性的操作符,我们可以在任何类中很容易地使用它们。使用方法是创建一个方法,方法名为保留的操作符关键字,这样就可以让这个操作符的行为映射到这个方法。重载这些操作符可以增加代码可读性和简洁性。
第一、 操作符表
这里你可以看见一系列包括操作符和对应方法的表。对应方法必须在指定的类中被实现。下面这些基本上都是我们常用到的一些。
一元操作符| 操作符 | 函数| |----| | +a | a.unaryPlus() | | -a | a.unaryMinus() | | !a | a.not() | | a++ | a.inc() | | a-- | a.dec() | 二元操作符| 操作符 | 函数| |----| | a + b | a.plus(b) | | a - b | a.minus(b) | | a * b | a.times(b) | | a / b | a.div(b) | | a % b | a.mod(b) | | a..b | a.rangeTo(b) | | a in b | a.contains(b) | | a !in b | !a.contains(b) | | a += b | a.plusAssign(b) | | a -= b | a.minusAssign(b) | | a *= b | a.timesAssign(b) | | a /= b | a.divAssign(b) | | a %= b | a.modAssign(b) | 数组操作符| 操作符 | 函数| |----| | a[i] | a.get(i) | | a[i, j] | a.get(i, j) | | a[i_1, ..., i_n] | a.get(i_1, ..., i_n) | | a[i] = b | a.set(i, b) | | a[i, j] = b | a.set(i, j, b) | | a[i_1, ..., i_n] = b | a.set(i_1, ..., i_n, b) | 等于操作符| 操作符 | 函数| |----| | a == b | a?.equals(b) ?: b === null | | a != b | !(a?.equals(b) ?: b === null) |相等操作符有一点不同,为了达到正确合适的相等检查做了更复杂的转换,因为要得到一个确切的函数结构比较,不仅仅是指定的名称。方法必须要如下准确地被实现:
operator fun equals(other: Any?): Boolean
操作符===和!==用来做身份检查(它们分别是Java中的==和!=),并且它们不能被重载。_函数调用__| 方法 | 调用 | |----| | a(i) | a.invoke(i) | | a(i, j) | a.invoke(i, j) | | a(i_1, ..., i_n)| a.invoke(i_1, ..., i_n) |第二、下面我们们来说一下具体的使用例子Kotlin List是实现了数组操作符的,所以我们可以像Java中的数组一样访问List的每一项。除此之外:在可修改的List中,每一项也可以用一个简单的方式被直接设置:
val x = myList[2]myList[2] = 4
前面我们讲过一个叫ForecastList的数据类,现在做一个完全不相关的事情,我要去实现一个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]
这样看,瞬间觉得代码清爽了很多。
阅读全文
0 0
- Kotlin操作符重载(十)
- Kotlin-操作符重载
- 十、操作符重载
- Kotlin开发Android笔记9:Kotlin操作符重载
- Kotlin:基本类型及操作符重载
- Kotlin进阶之相等、操作符重载
- Kotlin学习(6)操作符重载
- Kotlin教程学习-操作符,操作符重载
- Kotlin-31.操作符/运算符重载(operator overload)
- Kotlin扩展函数与重载操作符解析
- kotlin学习笔记——重载操作符
- Kotlin 其他(七) --- 操作符重载(Operator overloading)
- Kotlin - 运算符重载
- Kotlin基础教程-运算符重载
- Kotlin运算符重载总结
- Kotlin 中的操作符重载汇总表 与 可见性修饰符总结
- 学习kotlin第15天_操作符重载、空安全、异常、注解
- Kotlin常用操作符
- leetcode 343. Integer Break
- Python陷阱之 is 和 == 区别
- 新人产品分析——第二步
- samba的基础用法
- HDU2087--KMP模板题
- Kotlin操作符重载(十)
- 异或的一些有趣的应用
- 新人产品分析——第二步(2)
- Gradle构建多模块项目(整合Java SE 和 Springboot)
- 两个机器配置免密码访问
- JFrame如何处理组件上发生的事件
- 新人产品分析——第三步(1)
- QML之MouseArea事件
- 用代码聊算法之k-means算法