Kotlin 语法使用问题-不定期更新

背景

对lambda不熟悉,java中使用非常熟练的语法,居然不知道怎么写,大写的尴尬尴尬

该文档没有特定的格式与编号,有时发现了新大陆,便在地图上面标一下,查阅时就使用搜索功能ctrl+f

一、定义局部变量(如果不加private修饰,默认为public):

var actionList = mutableListOf<String>()//这是一个可变的列表,并初始化,但是并没有值,类似arrayList

var parent: MainActivity? = null//这是定义一个空的变量
二、定义静态变量(使用companion object修饰)

companion object {
    val TAG = "MainTaskListFragment"
    val FIRST_REFRESH_STATUS = "firstRefreshStatus"
    val SCAN_PERIOD = "scanPeriod"

使用方式与java一样,如果是低版本的kotlin需要在中间加上companion,例如MainActivity.Companion.TAG

三、定义静态类

object CheckUtils {}//将class变为object即可
使用方法:

1、在java代码中使用:需要以单例的方式使用,例如CheckUtils.INSTANCE.方法()

2、在kotlin使用:与正常的java一样,CheckUtils.方法()

四、?与!!区别

? :允许为空,如果为空将不执行?后面的代码(实际就是做了一个null判断)。

!!: 告诉编译器,这个东西不可能为空,别管了

五、设置OnClickListener:

appContentContainer.setOnClickListener { v ->
        showSnackbar("")
        showToast("dfdf")
}

六、多个参数的接口,直接在参数处加上就可以:OnItemClickListener

adapter.setOnItemClickListener { v, position -> 此处有多行代码也不需要加上花括号}

七、需要传递接口与其他参数组全的方法

getAdapter<Adapter>().setOnClickListener(RecyclerViewBaseParentAdapter.OnClickListener { view, holder, position ->
    when ((view as Button).text) {
        
    }
}, R.id.btn1, R.id.btn2)

八、接口有需要多个重写的方法

setupTab(object : TabLayout.OnTabSelectedListener {
    override fun onTabReselected(tab: TabLayout.Tab?) = Unit

    override fun onTabUnselected(tab: TabLayout.Tab?) = Unit

    override fun onTabSelected(tab: TabLayout.Tab?) {
        type = tab?.position!!
        if (!isFirst) onRefresh()
    }
}, type, "全部", "待付款", "待发货", "待收货", "待评价")

九、if条件表达式,允许返回内容

var temp=if (a>b){
    showToast("a大于b")
    "a大于b"
}else{
    showToast("a小于b")
    "a小于b"
}

这样子,temp就是String类型的值

十、when条件表达式(此表达式功能强大

1、条件分支表达

when (a > b) {
    true->{}
    false->{}
}
when("张三"){
    "张三"->{}
    "李四"->{}
    "王五"->{}
    else ->{}
}
2、条件分支表达-带返回值

var temp = when ("张三") {
    "张三" -> {
        showToast("这是张三")
        "张三"//默认最后一句代码为返回值,注意写法哟
    }
    "李四" -> {
        showToast("这是李四")
        "李四"
    }
    "王五" -> {
        showToast("这是王五")
        "王五"
    }
    else -> {
        "没找到这个人"
    }
}
3、条件表达(类似switch)

when {
    a > b -> {
    }
    b < a -> {
    }
    else->{}
}
同样也可携带返回值

4、如果有的方法只有一个逻辑可以直接返回when的值

fun isRefresh() = when (pageNumber) {
    0 -> true
    else -> false
}

十一、重构函数

1、只有个重构函数

class TestActivity(type:Int=1,id:Int):BaseActivity()//直接在类名后面写方法参数即可,可多个

使用方法,实例化时传递,与java相同

2、多个重构方法

class TestActivity : BaseActivity, View.OnClickListener {

    constructor(type:Int){

    }
    constructor(type:Int,id:Int){}
注意,BaseActivity后面的小括号没有了

十二:列表遍历

kotlin对简单的遍历提供了快速的方法,非常科学!

例子:

传统遍历列表数据的写法:

for (index in 0 until dataList.size) {
    if (dataList[index].code == "1") {
        //do something
    }
}

kotlin写法

第一种:

(0 until dataList.size).map { dataList[it] }.filter { it.code == "1" }.forEach {
    //满足条件执行的
}

第二种:迭代器

dataList.filter { it.code == "1" }.forEach {
    //满足条件执行的
}

说明:

map-转化为列表

filter-筛选,满足条件才会执行forEach

foreach-遍历结果

十三:列表筛选结果

列表中某一项,满足条件,便结束循环

传统写法:

for (index in 0 until taskList.size) {
    if (taskList[index].code == "1") {
        task = taskList[index] return
    }
}
kotlin写法

if (!(0 until taskList.size).map { taskList[it] }.any { it.code == "2" }) {
    //do something
}

说明:

any-至少有一个元素满足条件时返回true


十四:单例模式

直接把class改成加入object就行啦

例子:

object CheckUtils{

fun sum(a:Double,b:Double)=a+b

}

使用:

java中调用 CheckUtils.getInstance().sum()

kotlin中调用 CheckUtils.sum()




猜你喜欢

转载自blog.csdn.net/Fy993912_chris/article/details/78475003