中缀函数,很好玩的亚子。
先说说中缀函数必须满足的三个条件:
- 仅支持成员函数或扩展函数
- 参数只能有一个
- 不得接受可变数量参数,参数不能有默认值。
声明函数
infix fun String.builder(str: String): String {
return StringBuilder(this).append(str).toString()
}
infix fun String.buffer(str: String): String {
return StringBuffer(this).append(str).toString()
}
//打印log看效果
inline fun <reified T> T.ktxLog(msg: String) = Log.d(T::class.java.name, msg)
调用
ktxLog("infix" builder "builder")
ktxLog("infix" buffer "buffer")
中缀函数的调用贴近自然语言,可以骚一下
infix fun String.拼接(str: String): String {
return StringBuilder(this).append(str).toString()
}
infix fun String.安全拼接(str: String): String {
return StringBuffer(this).append(str).toString()
}
调用
ktxLog("infix" builder "builder")
ktxLog("infix" 拼接 "拼接")
ktxLog("infix" buffer "buffer")
ktxLog("infix" 安全拼接 "安全拼接")
log
2020-01-08 17:30:53.584 4205-4205/HomeActivity: infixbuilder
2020-01-08 17:30:53.584 4205-4205/HomeActivity: infix拼接
2020-01-08 17:30:53.584 4205-4205/HomeActivity: infixbuffer
2020-01-08 17:30:53.584 4205-4205/HomeActivity: infix安全拼接
搞一搞集合
infix fun <E> ArrayList<E>.添加(e: E) {
this.add(e)
}
infix fun <E> ArrayList<E>.删除(e: E) {
this.remove(e)
}
infix fun <E> ArrayList<E>.删除(index: Int) {
this.removeAt(index)
}
调用
val list = ArrayList<String>()
list 添加 "1"
list 删除 "1"
list 删除 1
包装LinkedList
infix fun <E> LinkedList<E>.添加(e: E) {
this.add(e)
}
infix fun <E> LinkedList<E>.删除(e: E) {
this.remove(e)
}
infix fun <E> LinkedList<E>.删除(index: Int) {
this.removeAt(index)
}
=。=花里胡哨有没有。友情提示,别搞中文方法,会被打。