本文同步发表于我的微信公众号,在微信搜索 不要注水 即可关注。
今天一起来学习下 Kotlin 扩展函数,话不多说直接上代码。
首先定义一个扩展函数,功能是将 String 转成 Int 值,代码如下。
fun String?.toIntOrZero(): Int {
if (this.isNullOrEmpty()) {
return 0
}
try {
return this.toInt()
} catch (e: NumberFormatException) {
e.printStackTrace()
}
return 0
}
这里的方法名就表面了我们的这个函数是扩展到 String? 类型上的,在方法体内就可以使用 this 指向具体的调用的对象。
来看看使用效果吧
val s = ""
Log.d("k", "" + s.toIntOrZero()) // 0
可以看到,使用很简单,直接在 String 类型的对象上调用这个方法就可以了,非常方便。
那么我们来看看 kotlin 是怎么帮我们实现这个功能的吧,首先查看第一个方法编译成 java 的版本,如下。
public final class StringExtKt {
public static final int toIntOrZero(@Nullable String $this$toIntOrZero) {
CharSequence var1 = (CharSequence)$this$toIntOrZero;
boolean var2 = false;
boolean var3 = false;
if (var1 == null || var1.length() == 0) {
return 0;
} else {
try {
var2 = false;
return Integer.parseInt($this$toIntOrZero);
} catch (NumberFormatException var4) {
var4.printStackTrace();
return 0;
}
}
}
}
可以看到 kotlin 帮我们实现了一个静态方法,在调用的地方也是同样的道理,kotlin 帮我们做了一些改变。
String s = "";
Log.d("k", "" + StringExtKt.toIntOrZero(s));
Kotlin 将我们的写法转换成了调用上面的静态方法,不用我们手动去写过多的代码,不得不说在某些场景下还是很方便的。好了,今天的分享就到这里了。
PS.写完已经是晚上11点50了,只好赶快发布,如有什么差错,大家多多包涵。