Kotlin学习之双冒号
Posted 安卓小小鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin学习之双冒号相关的知识,希望对你有一定的参考价值。
Kotlin学习之双冒号
最新在复习kotlin相关的知识,看到一个平时不注意的点,就是::的使用,平时开发使用都是IDE提示,顺手一改,今天复习看到了这个知识点,就顺手复习记录一下
::定义
Kotlin 中 双冒号操作符 表示把一个方法当做一个参数 ,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法。先来看一下例子:
object KotlinLearn
@JvmStatic
fun main(args: Array<String>)
val testInstance = Test()
print(lock("a","m", ::getResult))
print(lock("a","m", testInstance::test))
fun getResult(str1: String, str2: String): String = "result is $str1 , $str2"
fun lock(p1: String, p2: String, method: (str1: String, str2: String) -> String): String
return method(p1, p2)
fun lock(p1: String, p2: String, method: () -> Boolean): String
return if (method()) "false" else "true"
/**
* 另外一个类
*/
class Test
fun test():Boolean
print("测试::")
return false
fun lock(p1: String, p2: String, method: (str1: String, str2: String) -> String): String
return method(p1, p2)
fun lock(p1: String, p2: String, method: () -> Boolean): String
return if (method()) “false” else “true”
这两个方法分别需要一个lamda表达式,一个是两参数String,并且返回String的,一个是无参函数,返回boolean类型的。
这样,这两个函数就可以以::形式传参 并传入我们的getResult 和 test函数。
这里有一点需要注意的就是,如果在同一个类里的方法,可以直接::method,但是如果在另一个类里面,就需要另一个类的实例::method 了。
a::method 和 a.method 一样吗
首先,肯定不一样的,但是在学习过程中我以为是一样的,所以走了弯路,比如代码这么写的时候
if (testInstance::test)
print(true)
我以为会和普通方法调用一样
if (testInstance.test())
print(true)
但其实根本不一样 啊,所以看一下定义
Kotlin 中 双冒号操作符 表示把一个方法当做一个参数 ,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法
这种写法只是一个参数。需要传递到另一个方法中使用,所以千万不要混淆~~
特此记录。
以上是关于Kotlin学习之双冒号的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin:: 双冒号操作符详解 ( 获取类的引用 | 获取对象类型的引用 | 获取函数的引用 | 获取属性的引用 | Java 中的 Class 与 Kotlin 中的 KClass )