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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容