kotlin-----方法

2022-01-06  本文已影响0人  会写代码的小猿猴

方法的声明

比如我需要定义一个接收两个int类型参数,返回这两个参数的和,代码如下:

fun add(a:Int,b:Int):Int{
    return a+b
}

定义方法构造和Java有区别,只需牢记就好

class Test{
    fun add(a:Int,b:Int):Int{
        return a+b
    }
}

调用:

Test().add(1,2)

Kotlin给Java开发者带来最大改变之一就是废弃了static修饰符。与Java不同的是在Kotlin的类中不允许你声明静态成员或方法。相反,你必须向类中添加Companion对象来包装这些静态引用
定义:

class Test{
    companion object{
        fun add(a:Int,b:Int):Int{
            return a+b
        }
    }
}

调用直接通过类名调用,这一点和Java一样,其中 companion object包裹的内容叫做类Test的伴生对象

 Test.add(1,3)

静态类通过object关键字来修饰,静态类里面的方法都是静态方法

object NumUtils{
    fun double(a:Double):Double{
        return a*a
    }
}

调用也是一样,静态类名调用,NumUtils叫做单例。可以用@JvmStatic修饰符来将其中的成员变量或者方法指定为静态成员变量或者方法。

NumUtils.double(2)
fun add(a:Int,b: Int):Int=a+b

该方法等价于

fun add(a:Int,b: Int):Int{
    return a+b
}

如字面意思,方法带有默认参数,调用时可以省略有默认值的参数,与Java相比,可以减少方法的重载数量
例:

fun read(ArrayList<Char>,off:Int=1,len:Int=b.size){
    //doSomeThings
}

调用时有三种方式

 val b = arrayListOf('a', 'b', 'c')
    read(b)
    read(b, 0)
    read(b, 2, 5)

相对于Java而言节省了参数为一个和两个时的重载方法。

通过修饰符vararg可以表示接收多个同数据类型的参数

fun append(vararg chars:Char):String{
    val str=StringBuffer()
    chars.forEach {
        str.append(it)
    }
    return str.toString()
}

调用:

 println(append('h','e','l','l','o'))

kotlin支持在方法内部定义方法,比如我在a方法内部定义方法b,那方法b的作用于仅局限于方法a内部。

fun margic():Int{
    fun add(a:Int):Int{
        return a+a
    }
    //生成0到100的随机数
    val b=(0..100).random()
    return add(b)
}

lambda表达式的特点:
1、是匿名方法
2、是可以作为参数传递的
lambda表达式创建方法分为有参数的情况和无参数情况

var/val 变量名={操作的代码}

例如我们将下面这个方法改成lambda表达式:

fun test(){
 println("无参数情况")
}

改成lambda表达式如下所示:

val test2 =  { println("无参数情况") }

运行时使用变量名加括号就可以了

test2()
var/val 变量名:(参数类型,参数类型,...)  -> 返回值类型={参数1,参数2,... -> 操作参数的代码}

在返回值类型可以自动推导的情况下可等价于:

val/var 变量名={参数1:类型,参数2:类型,... -> 操作参数的代码}

比如我们有以下一个简单求和的方法

fun test3(a:Int,b:Int):Int{
    return a+b
}

改成lambda表达式如下

val test3:(Int,Int)->Int={a,b -> a+b}

也可等价于:

val test4={a:Int,b:Int -> a+b}

调用时也是直接变量名加括号就可以了。

上一篇 下一篇

猜你喜欢

热点阅读