在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)
}
以上就是我对kotlin中的扩展函数的一些总结,希望对大家有帮助~
【附录】

需要资料的朋友可以加入Android架构交流QQ群聊:513088520
点击链接加入群聊【Android移动架构总群】:加入群聊
获取免费学习视频,学习大纲另外还有像高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)等Android高阶开发资料免费分享。
网友评论