icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Kotlin语言基础

    • 数据类型
    • 数组的使用
    • Kotlin集合
    • Kotlin流程控制
    • Kotlin方法
      • 1. 声明
        • 成员方法
        • 静态方法
        • compantion object伴生类的方法
      • 2. 单表达式方法
      • 3. 传值参数
        • 默认参数
        • 具名参数
      • 4. 可变数量的参数-Varargs
      • 5. 方法作用域
    • 类和方法
    • Lambda表达式
    • Kotlin泛型
  • Kotlin笔记
  • Kotlin语言基础
iqqcode
2022-04-09
目录

Kotlin方法

# 1. 声明

Kotlin方法

fun function(age: Int): Boolean {
    return age > 100
}
1
2
3

# 成员方法

class Person {
    fun test() {
        println("Kotlin")
    }
}

fun main() {
    Person().test()
}
1
2
3
4
5
6
7
8
9

# 静态方法

借助 object来创建一个静态类:

object UtilHelper {
    fun double(num: Int): Int {
        return num * 2
    }
}


fun main() {
    UtilHelper.double(2)
}
1
2
3
4
5
6
7
8
9
10

# compantion object伴生类的方法

在普通类中创建静态方法,Kotlin中并没有static关键字,不过我们可以借助companion object来实现类方法的目的

lass Person {
    companion object {
        fun test2() {
            println("companion object 实现的类方法")
        }
    }
}
Person.test2()
1
2
3
4
5
6
7
8

# 2. 单表达式方法

当方法返回单个表达式时,可以省略花括号并且在 = 符号之后指定代码体即可:

fun double(x: Int): Int = x * 2
1

当返回值类型可由编译器推断时,显式声明返回类型是可选的:

fun double(x: Int) = x * 2
1

# 3. 传值参数

# 默认参数

方法参数可以有默认值,当省略相应的参数时使用默认值。与其Java相比,这可以减少重载数量:

fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) {
    /*……*/ 
}
1
2
3

我们可以通过类型后面的 = 来设置默认值。

如果重载的方法无具体默认值,怎么办呢,就要使用 具名参数了

# 具名参数

如果一个默认参数在一个无默认值的参数之前,那么该默认值只能通过使用具名参数调用该方法来使用:

fun foo(bar: Int = 0, baz: Int) {
    /*……*/ 
}

foo(baz = 1) // 使用默认值 bar = 0
1
2
3
4
5

如果在默认参数之后的最后一个参数是 lambda 表达式,那么它既可以作为具名参数在括号内传入,也可以在括号外传入:

如果参数类型是 () ,说明改参数是一个方法类型

  • 方法参数的返回值使用 -> String,如果无法回使用—> Unit
fun foo(bar: Int = 0, baz: Int = 1, qux: () -> Unit) {
    /*……*/ 
}

// 
foo(1) { // 使用默认值 baz = 1
    println("hello") 
}

foo(qux = { // 使用两个默认值 bar = 0 与 baz = 1
    println("hello") 
}) 

foo { // 使用两个默认值 bar = 0 与 baz = 1
    println("hello") 
}        
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

实例参考


fun method(offset: Int = 0, start: Int, action: () -> String) {
    val ret = action
    println("$ret")
}

fun method(offset: Int = 0, start: Int) {
    println("method: $offset, $start")
}


fun main() {
    // ======================   在括号内传入 ======================
    method(1,2, action = {
        return@method "method"
    })

    // [简写]: 方法体最后一行,就是该方法的返回值
    method(1,2, action = {
        val result = 2 * 6
        "[括号内传入参数] > method $result"
    })

    // ======================= 在括号外传入 ========================

    method(start = 6) {
        "[括号外传入参数] > method"
    }

    // 具名参数
    method(start = 2)

    method(1,2)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 4. 可变数量的参数-Varargs

传入的参数个数不确定

方法的参数(通常是最后一个)可以用 vararg 修饰符标记:

fun append(vararg str: Char): String {
    val result = StringBuffer()
    for (char in str) {
        result.append(char)
    }
    return result.toString()
}
1
2
3
4
5
6
7

允许将可变数量的参数传递给方法:

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

可变参数的要求:

  • 只有一个参数可以标注为 vararg;
  • 如果 vararg 参数不是列表中的最后一个参数, 可以使用具名参数语法传递其后的参数的值,或者,如果参数具有方法类型,则通过在括号外部传一个 lambda。

当我们调用 vararg 方法时,我们可以一个接一个地传参,例如 append('h', 'e', 'l', 'l', 'o'),或者,如果我们已经有一个数组并希望将其内容传给该方法:

我们使用伸展**(spread)操作符(在数组前面加 *)**

val world = charArrayOf('w', 'o', 'r', 'l', 'd')
val result = append('h', 'e', 'l', 'l', 'o',' ', *world)
1
2

# 5. 方法作用域

在 Kotlin 中方法可以在文件顶层声明,这意味着你不需要像一些语言如 Java、C# 那样需要创建一个类来保存一个方法。 此外除了顶层方法,Kotlin 中方法也可以声明在局部作用域、作为成员方法以及扩展方法。

# 局部方法

Kotlin 支持局部方法,即一个方法在另一个方法内部:

fun magic(): Int {
    fun foo(v: Int): Int {
        return v * v
    }

    val v1 = (0..100).random()
    return foo(v1)
}
1
2
3
4
5
6
7
8

局部方法可以访问外部方法(即闭包)的局部变量。

编辑 (opens new window)
上次更新: 2022/06/04, 11:36:35
Kotlin流程控制
类和方法

← Kotlin流程控制 类和方法→

最近更新
01
匿名内部类
10-08
02
函数式接口
10-08
03
ARouter-Kotlin踩坑
10-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×