java 函数多态性与Kotlin写法的不同
java中的函数写法
public void add(int a)
public void add(int a, String b)
public void add(int a, String b, Boolean c)
public void add(int a, Boolean c)
kotlin实现
fun add(a :Int , b :String ="1",c :Boolean =false)
调用实现
add(1)
add(1,"Gex")
add(1,"Gex",true)
add(a=1,b="Gex",c=true)
Unit函数
Unit函数相当于java中的void
单行函数表达
在kotlin中的函数是可以直接 用“=”号 代替大括号的函数体
fun add(x:Int):Int= x+2
// 返回值类型也是可以省去
fun double(x:Int)= x + 2
// 这里是一个参数 可以推断出类型 所以可以省去,如果多个参数时,推断不出来就不可以省去了
函数可变参数
在java中可变参数的表示用"...",在kotlin中则要使用Varargs 关键字修饰
fun add( vararg a : Int){
}
add ( 1,2,4,5)
可变参数Varargs的" * "使用,可以直接把一个同类型的参数传递进来:
var codes= arrayOf(1,2,3,4,5,6)
var nums= add( 3,45,7, *codes) //这样就传进来了a的参数
Kotlin函数多方法回调的简写方法
最基本类似于Java的写法:
//接口
interface OnKtPlayerOptionListener {
fun fullScreen()
fun smallScreen(is16X9:Boolean)
}
//KtPlayerHelper中的方法
fun setOptionListener(listener: OnKtPlayerOptionListener) {
mPlayer?.attachOptionListener(listener)
}
//调用
KtPlayerHelper.getInstance().setOptionListener(object : KtPlayerHelper.OnKtPlayerOptionListener {
override fun fullScreen() {
}
override fun smallScreen(is16X9: Boolean) {
}
})
整体看起来跟Java没有太大差别,接下来看下Kotlin中的简化写法
class KtPlayerOptionCallBack : OnKtPlayerOptionListener {
private var fullCallBack: (() -> Unit)? = null
fun full(callback: () -> Unit) {
fullCallBack = callback
}
override fun fullScreen() {
fullCallBack?.invoke()
}
private var smallCallBack: ((is16X9:Boolean) -> Unit)? = null
fun small(callback: (is16X9:Boolean) -> Unit) {
smallCallBack = callback
}
override fun smallScreen(is16X9:Boolean) {
smallCallBack?.invoke(is16X9)
}
}
新增一个方法setOptionCallBack(callback: KtPlayerOptionCallBack.() -> Unit)
private fun setOptionListener(listener: OnKtPlayerOptionListener) {
mPlayer?.attachOptionListener(listener)
}
fun setOptionCallBack(callback: KtPlayerOptionCallBack.() -> Unit) {
var cb = KtPlayerOptionCallBack()
cb.callback()
setOptionListener(cb)
}
简化后的调用如下:
KtPlayerHelper.getInstance().setOptionCallBack {
full {
KtPlayerHelper.getInstance().attachToFullPlayer(view.context as Activity)
ActivityHelper.lockLandScape(view.context as Activity)
}
small {
if (it) {
ActivityHelper.lockPortrait(view.context as Activity)
} else {
}
}
}
ssssssss.jpg