kotlin中的扩展函数

在java中我们会去定义一些工具类,用来扩展一些类的方法,如下:

public class Utils {
    public static boolean isEmpty(String[] args){
        return args == null || args.length == 0;
    }

    public static boolean isNotEmpty(String[] args){
        return args.length > 0;
    }
}
public class Extends {
    public static void main(String... args){
        if (Utils.isEmpty(args)){

        }
        if (Utils.isNotEmpty(args)){

        }
    }
}

在kotlin中我们可以采取扩展函数来,可以不需要去写工具类,直接扩展现有类的方法如下:

fun main(args: Array<String>) {
    if (args.isEmpty()){
        
    }
}

isEmpty其实就是Array的扩展方法

@kotlin.internal.InlineOnly
public inline fun <T> Array<out T>.isEmpty(): Boolean {
    return size == 0
}

下面我们自己来定义一个扩展函数

fun main(args: Array<String>) {
    println("abc")
}

如果我想打印"abc"16次可以定义如下扩展函数

//扩展函数
fun String.multiply(int : Int):String{
    val stringBuilder = StringBuilder();
    for (i in 0 until int){
        stringBuilder.append(this)
    }
    return stringBuilder.toString()
}
fun main(args: Array<String>) {
    println("abc".multiply(16))
}

另外我们还可以对运算符进行重载

//运算符号重载
operator fun String.times(int : Int):String{
    val stringBuilder = StringBuilder();
    for (i in 0 until int){
        stringBuilder.append(this)
    }
    return stringBuilder.toString()
}
fun main(args: Array<String>) {
    println("abc"*16)
}

最后输出

abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc

除了方法可以扩展外,属性也是可以扩展的

val String.a : String
    get() = "abc"

var String.b : Int
    set(value){
        
    }
    get() = 5
fun main(args: Array<String>) {
    println("abc".a)
    println("abc".b)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容