kotlin学习笔记

2 篇文章 0 订阅
1 篇文章 0 订阅

第一个正式使用kotlin,kotlin减少了很多new set get等方法,直接=即可,用起来十分简洁,以下是自己在此项目使用中经常用到的几个知识点,简单记录一下,方便之后查阅。

一、非空机制

1. 类型后面加?表示可为空

var a: String? = null

    if (a == null) {

        println("a is null")

    } else {

        println(a)

    }k

2. 变量后面加!!,可抛出控指针异常

3. 变量后面加?,不做处理返回 null,相当于java直接if判空,写法简单

4. 返回值后面加?:,为空时返回

  val  a = null

val aa= age?.toInt() ?:-1

5. 当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null

fun toInt(str: String): Int? {

  // ...

}

6.let函数

当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。

adaper?.isShow?.let {
    if (it) {
        setEidt(true)
    } else {
        setEidt(false)
    }
}

 

let,with,run,apply,also函数区别

函数名

定义inline的结构

函数体内使用的对象

 

返回值

是否是扩展函数

适用的场景

let

fun <T, R> T.let(block: (T) -> R): R = block(this)

it指代当前对象

闭包形式返回

适用于处理不为null的操作场景

with

fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()

this指代当前对象或者省略

闭包形式返回

适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可,经常用于Android中RecyclerView中onBinderViewHolder中,数据model的属性映射到UI上

run

fun <T, R> T.run(block: T.() -> R): R = block()

this指代当前对象或者省略

闭包形式返回

适用于let,with函数任何场景。

apply

fun T.apply(block: T.() -> Unit): T { block(); return this }

this指代当前对象或者省略

返回this

1、适用于run函数的任何场景,一般用于初始化一个对象实例的时候,操作对象属性,并最终返回这个对象。

also

fun T.also(block: (T) -> Unit): T { block(this); return this }

it指代当前对象

返回this

适用于let函数的任何场景,一般可用于多个扩展函数链式调用

二、方法的可见性

default,public:能见到类声明的

private:相同class可见

protected:相同class及子类可见

internal:能见到类声明的 本模块内 的任何客户端都可见

三、类

1.类的创建和构造方法 Kotlin 构造器关键字 constructor 声明, 如果没有可见性、注解等修饰,可省略 constructor。和 Java 具有构造函数不一样, Kotlin的构造器只有声明, 初始化代码可放到 init 块。

class WebUrlBaseDbBean(url: String, title: String) {

    private val mUrl: String

    private val mTitle: String

    init {

        mUrl = url

        mTitle = mTitle

    }

}

Java 可以为类定义多个构造函数, Kotlin 也可以, 但不一样的是, Kotlin 的构造器有主次之分。Kotlin只有一个主构造器,如上代码所示就是主构造器, 次级构造器必须直接或者间接调用主构造器,示例:

 

class WebUrlBaseDbBean (url: String, title: String) {

    constructor(url: String): this(url, “11”)

}

主构造器不能带函数体,次级构造器可带函数体。如果主构造器没有参数,可省略,编译器会自动生成无参构造器。

 

class WebUrlBaseDbBean {

    private var url: String? = null

    contructor(url: String) {

        this. url = url

    }

    init {

        // do something

    }

}

2、静态方法与变量

使用companion object {} 包裹的,就是静态方法和字段

3、继承

Kotlin 类可以继承 open 的类和接口, 如果没有继承,默认继承 Any, Any 相当于 Java 的 Object 类, 是所有类的基类。

和 Java 不同, Kotlin 类默认是 final 的, 要允许被继承,需要显式声明为 open,抽象类默认是 open 的。

类的方法也类似, 允许被重载需要 open 声明。

4、参数的默认有getter 和 setter,不用定义

 

三、集合

创建(只读方式:不可增删元素)

val listBook = listOf<String>(“11”, “22”, “33”, “44”, “55”)

增删元素(转换成以下三个才可以)

MutableList

MutableSet

MutableMap

Kotlin 构造器关键字 constructor 声明, 如果没有可见性、注解等修饰,可省略 constructor。和 Java 具有构造函数不一样, Kotlin的构造器只有声明, 初始化代码可放到 init 块。

四、协程

特点:

使用方便,不使用回调实现线程切换,使用同步方式写出异步代码

所有的耗时任务保证一定放在后台执行

挂起函数执行完毕之后,协程会把它切换到原先的线程的线程。

 

Dispatchers.Main 调用程序在Android的主线程中

Dispatchers.IO 适合主线程之外的执行磁盘或者网络io操作,例如文件的读取与写入,任何的网络请求

Dispatcher.Default 适合主线程之外的,cpu的操作,例如json数据的解析,以及列表的排序,

GlobalScope.launch {

           val delList= DbHelper.getFavoritenDao().loadAll()

            DbHelper.getFavoritenDao().deleteAll()

            FavoriteRequestManager.getInstance().delCollect(delList,null)

            FavoriteReceiver.refreshData(ContextUtils.getAppContext())

        }

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值