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 中 双冒号操作符 表示把一个方法当做一个参数 ,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法
这种写法只是一个参数。需要传递到另一个方法中使用,所以千万不要混淆~~

特此记录。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值