Kotlin 中的函数和 Java 中的方法并不是一个概念。方法是属于函数的一种,在Kotlin里函数属于一等公民
。什么是一等公民
呢?那就是和对象有着一样的地位,可以被赋值,传递。而方法只是一种只能写在类里面的,供对象调用的函数即有reciever的函数。
Java中只有方法,没有函数。
函数的定义
fun 函数名(参数名:参数类型): 返回类型{}
fun main(args: Array<String>): Unit {
}
//当返回类型为Unit(相当与Java中的void)时,: Unit可以省略,而main函数中的参数可以省略
fun main{}
参数
Koltin中的函数参数是使用Pascal表示法表示,即“name:type” 多个参数之间用逗号隔开。
fun main(args: Array<String>): Unit {
val m = m("Kotlin", "Hello")
println(m)
}
fun m(p0: String, p1: String): String {
return "${p0} ${p1}!"
}
运行结果: Kotlin Hello!
函数的类型
fun foo(){} => () -> Unit
fun foo(p0:Int): String{} => (Int) -> String
kotlin中因为函数是一等公民
所以它有自己的类型,由函数的参数和返回值组成,参数用()括起来,用 -> 连接
class Foo{
fun bar(p0:Int, p1:String):Any{}
}
函数类型: Foo.(Int,String) -> Any 或者 (Foo,String,Long) -> Any //Any 相当于Java中的Object
当函数定义在一个类中的时候,需要添加类名,上面两个实际上是一样的,第一种对于熟悉Java的人来说比较容易理解,而从逻辑上来说是将类的对象作为一个参数传递给函数。
函数的引用
函数的引用类似于C语言中的函数指针,可用于函数传递
fun foo(){} ==》 ::foo ==》 val f: ()->Unit= ::foo
fun foo(p0:String):String{} ==》 ::foo ==》 val g: (String)->String = ::foo
class Fun{
fun foo(p0:Int):String{}
}
==》 Fun::foo ==》 val h: (Fun,Int)->String = Fun::foo
::foo
这种格式相当于对函数的一个指针val f: ()->Unit = ::foo
定义了一个方法指针,它的类型就是函数的类型,可以被相同类型的函数赋值- 对于不同类型的函数,相同名称的函数(重载),有相同的引用方法即
::foo
赋值的时候根据前面的类型来推断是引用的哪个类型的函数
还有一种情况
class Fun{
fun foo(p0:Int):String{}
}
==》 Fun::foo ==》 val h: (Fun,Int)->String = Fun::foo
val f = Fun()
val h: (Int) -> String = f::foo
这是将类的对象当作参数传进函数,因为已经传进了一个参数,所以Fun可以省略
函数的调用
class Fun {
fun foo(p0: Int): String {
return "The number is $p0"
}
}
fun main(args: Array<String>): Unit {
val f = Fun()
val f1 = f.foo(1)
println(f1)
println("----------------------------------")
val f2: (Int) -> String = f::foo
println(f2(2))
println("----------------------------------")
val f3: (Fun, Int) -> String = Fun::foo
println(f3(f, 3))
}
运行结果:
The number is 1
----------------------------------
The number is 2
----------------------------------
The number is 3
第一种是类似与Java的调用方法
第二种和第三种是使用函数指针的方式,不同的是对象参数传入的时机,一个是在赋值时,一个是在调用时。
如有问题欢迎交流指正😄 😄
参考:
https://www.kotlincn.net/docs/reference/functions.html Kotlin官网
慕课网的Kotlin视频教程