​ Kotlin教程笔记(15) - 方法重载与默认参数

简介: ​ Kotlin教程笔记(15) - 方法重载与默认参数

本系列学习教程笔记属于详细讲解Kotlin语法的教程,需要快速学习Kotlin语法的小伙伴可以查看“简洁” 系列的教程

快速入门请阅读如下简洁教程:
Kotlin学习教程(一)
Kotlin学习教程(二)
Kotlin学习教程(三)
Kotlin学习教程(四)
Kotlin学习教程(五)
Kotlin学习教程(六)
Kotlin学习教程(七)
Kotlin学习教程(八)
Kotlin学习教程(九)
Kotlin学习教程(十)

​ Kotlin教程笔记(15) - 方法重载与默认参数

imgKotlin - 方法重载与默认参数

#方法重载(Overloads)

当一个类中有两个或多个具有相同方法名和不同的参数类型的方法时,就是重载:

class Person {
    fun say() {
        println("hahaha")
    }
    fun say(what: String) {
        println(what)
    }
    fun say(obj: Any) {
        println("this is ${obj.javaClass.simpleName}")
    }
}

fun main() {
    val person = Person()
    person.say() // hahaha
    person.say("hehehe") // hehehe
    person.say(person) // this is Person
}

方法签名由方法名和参数类型决定,与方法的其他属性无关。

#默认参数

在 Kotlin 中,方法可以使用默认参数,一般情况下,方法重载可以转换成带默认参数的方法:

class Person {
    fun say(what: String = "hahaha") {
        println(what)
    }
    fun say(obj: Any) {
        println("this is ${obj.javaClass.simpleName}")
    }
}

fun main() {
    val person = Person()
    person.say() // hahaha
    person.say("hehehe") // hehehe
    person.say(person) // this is Person
}

可以看到这里只是把 say()say(what:String) 使用默认参数整合了,但 say(obj:Any) 还在,其实 say(obj:Any) 的设计是不合理的,因为 String 是 Any 的子类,在调用方法时会有歧义,开发中,最好避免这种写法。

#JvmOverloads

现在 Person 类中的 say()是重载方法,而且其中一个 say 有默认参数,我们来看看在 Java 中调用如何:

img

可以发现,Java 中识别不到不带参数的 say()方法,这是因为 Java 并不知道 Kotlin 中有默认参数这种特性,它只能认为 say(what:String)say(obj:Any) 是重载方法,把 say(what:String) 中的默认参数给忽略了,Kotlin 提供了 @JvmOverloads 可以将带有默认参数的方法转换成对应的重载方法:

class Person {
    @JvmOverloads
    fun say(what: String = "hahaha") {
        println(what)
    }

    fun say(obj: Any) {
        println("this is ${obj.javaClass.simpleName}")
    }
}

ok,这下 Java 中就识别到了不带参数的 say()方法了

image-20241014190308995

目录
相关文章
|
25天前
|
Java Kotlin
​ Kotlin教程笔记(15) - 方法重载与默认参数
​ Kotlin教程笔记(15) - 方法重载与默认参数
30 4
​ Kotlin教程笔记(15) - 方法重载与默认参数
|
6天前
|
Java 开发者 Kotlin
​ Kotlin教程笔记(14) - 伴生对象与静态成员
​ Kotlin教程笔记(14) - 伴生对象与静态成员
|
4天前
|
Java 开发者 Kotlin
Kotlin教程笔记(2) - 类与构造器
Kotlin教程笔记(2) - 类与构造器
13 1
|
4天前
|
IDE 开发工具 Kotlin
Kotlin教程笔记(6) - 函数与Lambda表达式
Kotlin教程笔记(6) - 函数与Lambda表达式
18 1
|
12天前
|
Kotlin
Kotlin教程笔记(21) -高阶函数与函数引用
Kotlin教程笔记(21) -高阶函数与函数引用
Kotlin教程笔记(21) -高阶函数与函数引用
|
19天前
|
安全 Kotlin
Kotlin教程笔记(23) -作用域函数
Kotlin教程笔记(23) -作用域函数
|
4天前
|
数据安全/隐私保护 Kotlin
Kotlin教程笔记(7) - 类成员
Kotlin教程笔记(7) - 类成员
|
28天前
|
Java 开发者 Kotlin
Kotlin教程笔记(2)- 类与构造器
本系列教程详细讲解Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,可查看“简洁”系列教程。本文重点介绍Kotlin中的类与构造器,包括类的基本概念、主构造器与次构造器的使用、构造器参数的声明、类的继承以及包的声明等内容。通过实例代码,帮助读者更好地理解和掌握Kotlin的类与构造器相关知识。
29 1
|
12天前
|
Kotlin
Kotlin教程笔记(20) - 枚举与密封类
Kotlin教程笔记(20) - 枚举与密封类