背景
对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()