Kotlin函数记录

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

你可能感兴趣的:(Kotlin函数记录)