- 扩展函数:在不修改某个类的源码的情况下,仍然可以打开这个类,向该类中添加新的函数。
比如说,我们在Android开发中经常用到Toast,每次创建一个Toast的时候,又要传入上下文,还要传入内容,还要时间长短,最后还得写个show,有时候show忘记写了还一脸懵逼的不知道为啥不弹出来,于是可以封装一个ToastUtil来管理toast:
public class ToastUtil {
public static void showToast(String msg) {
Toast.makeText(MyApplication.getContext(), msg, Toast.LENGTH_SHORT).show();
}
}
这种写法绝对可以正常工作,并且这也是JAVA 编程中最标准的实现思维,但是有了扩展函数之后就不一样了,我们可以使用一种更加面向对象的思维来实现这个功能,比如说将showToast()添加到String类当中。
拓展函数的标准定义语法为:
fun ClassName.methodName(param1: Int,param2: Int): Int {
}
可以看到,要定义拓展函数的话,只需要在方法名前加一个ClassName.的语法结构,就表示将该函数添加到指定类当中了。
由于我们要向String类中添加扩展函数,所以先新建一个类叫String,名字随便无所谓,但是为了规范吧,要添加什么类的扩展函数就命名成什么类叭:
fun String.showToast() {
Toast.makeText(MyApplication.context, this, Toast.LENGTH_SHORT).show()
}
**注意一定要是顶层方法!!!**千万不要写在String类面了,不然是无效的。
那现在我们再想弹一个Toast的话,可以这么写:
"我是一个测试Toast".showToast()
当然不止String了,这只是个例子,你还可以为别的对象添加扩展函数。
说起来,我在写Flutter的时候,Dart的扩展函数我就不怎么喜欢,因为要手动导包,不像Kotlin这样写在顶层方法就可以直接调用了