【21】kotlin 扩展成员 扩展方法

流过昼夜 提交于 2020-08-09 03:00:48

java中我们常常需要定义很多工具类

package com.yzdzy.kotlin.chapter4.extend;

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

    public static boolean isNotEmpty(String[] args) {
        return args != null && args.length >= 0;
    }
}
package com.yzdzy.kotlin.chapter4.extend;

public class ExtemdsJava {
    public static void main(String[] args) {
        if(args.length==0){

        }
        if(args.length!= 0) {
        }
        Utils.isEmpty(args);
        Utils.isNotEmpty(args);
    }
}

而kt 提供了扩展方法 当然我饿米也可以自己定义扩展方法

下面案例打印16次adc

package com.yzdzy.kotlin.chapter4.extend

import java.lang.StringBuilder

fun main(args: Array<String>) {
    args.isNotEmpty()
    args.isEmpty()
    println("abc".multiply(16))
}

fun String.multiply(int: Int): String {
    val stringBuilder = StringBuilder()
    if (int > 0) {
        for (i in 0 until int) {
            stringBuilder.append(this)
        }
        return stringBuilder.toString()
    }
    return  stringBuilder.append(this).toString();
}

格式如下

扩展的类名.自定义的方法

String.multiply

使用起来就跟系统方法一个样

"abc".multiply(16)

还可以定义类似python的语法

package com.yzdzy.kotlin.chapter4.extend

import java.lang.StringBuilder

fun main(args: Array<String>) {
    args.isNotEmpty()
    args.isEmpty()
    println("abc" *16)
}

operator fun String.times(int: Int): String {
    val stringBuilder = StringBuilder()
    if (int > 0) {
        for (i in 0 until int) {
            stringBuilder.append(this)
        }
        return stringBuilder.toString()
    }
    return  stringBuilder.append(this).toString();
}

"abc" * 16

 

java如何调用这些扩展方法呢

package com.yzdzy.kotlin.chapter4.extend;

public class ExtemdsJava {
    public static void main(String[] args) {
        String res=ExtendsKt.times("adc",16);
        System.out.println(res);
    }
}

简言之

ExtendsKt.times("adc",16);

扩展成员

package com.yzdzy.kotlin.chapter4.extend

import java.lang.StringBuilder

fun main(args: Array<String>) {

    "".a
    "".b=5
    println("".b)
}


val String.a: String
    get() = "abc"
var String.b: Int
    get() = 5
    set(value) {
    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!