双冒号操作符1、引用顶层函数直接引用::【函数名】funisOdd(x:Int)x%2!0valnumberslistOf(1,2,3)valoddNumbersnumbers.filter(::isOdd)println(oddNumbers)// 等价于funisOdd(x:Int)x%2!0valnumberslistOf(1,2,3)valoddNumbersnumbers.filter{isOdd(it)}println(oddNumbers)2、引用成员函数未绑定引用【类名】::【成员函数】vallistlistOf(a,bb,ccc)vallengthslist.map(String::length)println(lengths)// 等价于vallistlistOf(a,bb,ccc)vallengthslist.map{it.length}println(lengths)dataclassPerson(valname:String,valage:Int)vallistlistOf(Person(Alice,25),Person(Bob,30))valnameslist.map(Person::name)println(names)// 等价于dataclassPerson(valname:String,valage:Int)vallistlistOf(Person(Alice,25),Person(Bob,30))valnameslist.map{it.name}println(names)已绑定引用【对象实例】::【成员函数】dataclassPerson(valname:String,valage:Int)valpPerson(Alice,25)valnameGetterp::nameprintln(nameGetter())3、引用构造函数dataclassPerson(valname:String,valage:Int)valcreatePerson::PersonvalpcreatePerson(Alice,25)println(p)4、引用属性varcount0funmain(){valcountProperty::countprintln(countProperty.get())countProperty.set(5)println(count)}对于局部变量Kotlin 编译器不支持生成可修改的属性引用只能生成只读的引用funmain(){varcount0valcountProperty::countprintln(countProperty.get())countProperty.set(5)println(count)}# 输出结果 Unresolved reference set.5、引用类dataclassPerson(valname:String,valage:Int)valkClass:KClassPersonPerson::classprintln(kClass.simpleName)