在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)
}