赞
踩
this.addFlags(flag)
}
if (this !is Activity) {
this.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
if (bundle != null) {
putExtras(bundle.toBundle()!!)
}
}
startActivity(intent)
}
我们可用的一些扩展函数和一些不可用的扩展函数:
可以看到 ActivityExt 类中的部分扩展函数不能使用。一些内联函数+标注泛型的扩展方法确是无法使用。(还我用的不对吗?不知道有没有大佬指点!)
高阶函数就是可以当参数方法函数,例如最简单的高阶函数对象 () -> Unit
这种函数在转成 Java 的过程会生成对应的 Function 接口。我们直接 new Function 的匿名接口对象即可。
比如我们定义一些高级函数的方法:
class KotlinDemo {
fun String.setValueCallback(block: () -> Unit) {
block()
}
fun setValueCallback2(block: () -> Unit, action: (Int) -> Int) {
block()
val action1 = action(1)
YYLogUtils.w(“我收到处理的值了-计算的结果:$action1”)
}
}
那么我在Java中怎么调用呢?
public void demo2(View view) {
KotlinDemo demo = new KotlinDemo();
demo.setValueCallback(“str”, new Function0() {
@Override
public Unit invoke() {
ToastUtils.INSTANCE.makeText(mActivity, “我被回调了!!”);
return null;
}
});
demo.setValueCallback2(new Function0() {
@Override
public Unit invoke() {
YYLogUtils.w(“这里没有返回值,我回调到我就行了”);
return null;
}
}, new Function1<Integer, Integer>() {
@Override
public Integer invoke(Integer integer) {
YYLogUtils.w(“这里有返回值,回调到这里,我还需要处理运算,我的上级才能收到我处理的值”);
return integer + 10;
}
});
}
打印的结果:
高阶函数的Java调用可以说是后续的基础,关于 Function 的接口,从Function1 到 Function22 Kotlin给我们定义了20多个接口对象,只是用于区分有多少个参数,本质都是一样的。
不会真有人定义这么多参数吧,我最多用到三个参数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。