【20】kotlin 重载

首先先分享一个java的方法重载的bug

remove()

package com.yzdzy.kotlin.chapter4.overloads;

import java.util.ArrayList;
import java.util.List;

public class Bug {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();
        integerList.add(13);
        integerList.add(2);
        integerList.add(3);
        integerList.add(23);
        integerList.add(5);
        System.out.println(integerList);
        integerList.remove(1);
        integerList.remove(5);
        System.out.println(integerList);


    }
}

可以按住ctrl 点击List进入源码 搜索remove

看这就是一个方法的重载;

什么bug呢。当我们移除

package com.yzdzy.kotlin.chapter4.overloads;

import java.util.ArrayList;
import java.util.List;

public class Bug {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();
        integerList.add(13);
        integerList.add(2);
        integerList.add(3);
        integerList.add(23);
        integerList.add(5);
        System.out.println(integerList);
        integerList.remove(1);
        integerList.remove(5);
        System.out.println(integerList);


    }
}

他会提示index 不能使用remove(Object )这个方法

像java sdk重载都有bug 

所以我们要慎用重载。

直接copy代码 到kt

    val integerList: MutableList<Int> = ArrayList()
    integerList.add(13)
    integerList.add(2)
    integerList.add(3)
    integerList.add(23)
    integerList.add(5)
    integerList.add(6)
    println(integerList)
    integerList.removeAt(1)
    integerList.remove(5)
    println(integerList)

稍微修改下。。kt有一个方法remove 和removeAt 这说明kt真不愧我为android官方开发语言还是聪明点

下面介绍重载

package com.yzdzy.kotlin.chapter4.overloads

import java.util.*

class Overloads {

    fun a():Int{
        return 0
    }
//    方法的重载 方法名相同 ,参数不同或者参数类型不同
    fun  a(int:Int):Int{
        return 1
    }
    fun  a(int:String):Int{
        return 1
    }
//方法签名。返回值不能做为方法签名的一部分
//    fun a():String{
//
//    }
}

fun main(args: Array<String>) {

    val overloads = Overloads()
    val integerList: MutableList<Int> = ArrayList()

}

我们已知a方法() 返回0  那么可以修改代码为

package com.yzdzy.kotlin.chapter4.overloads

import java.util.*

class Overloads {


    //    方法的重载 方法名相同 ,参数不同或者参数类型不同
    fun a(int: Int = 0): Int {
        return 1
    }

    fun a(int: String): Int {
        return 1
    }
//方法签名。返回值不能做为方法签名的一部分
//    fun a():String{
//
//    }
}

fun main(args: Array<String>) {

    val overloads = Overloads()
    val res= overloads.a()
    println(res)

}

 kt代码也能在java中执行。

不写报错。。。玩不起是不是。。

其实他可以在kt上面加注解

@JvmOverloads
package com.yzdzy.kotlin.chapter4.overloads

import java.util.*

class Overloads {


    //    方法的重载 方法名相同 ,参数不同或者参数类型不同

    @JvmOverloads
    fun a(int: Int = 0): Int {
        return 1
    }

    fun a(int: String): Int {
        return 1
    }
//方法签名。返回值不能做为方法签名的一部分
//    fun a():String{
//
//    }
}

fun main(args: Array<String>) {

    val overloads = Overloads()
    val res= overloads.a()
    println(res)

}

java代码也就不报错了

 

哦泡时间到 我们总结一下

方法重载

  • Overloads

  • 名称相同,参数不同的方法

  • Jvm函数签名的概:函数名、参数列表(不包括返回值)

默认参数

  • 为函数参数设定一个默认值

  • 可以为任意位置的参数设置默认值

  • 函数调用产生混淆时用具名函数

方法重载与默认参数

  • 二者的相关性 (可以相互转换) @JvmOverloads

  • 避免定义关系不大的重载 list.remove bug

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值