kotlinAndroidAndroid开发

Kotlin关键字快速查找

2022-04-24  本文已影响0人  zhongjh
关键字 注释
constructor 构造函数
Any Kotlin Any简介Any类型是Kotlin所有非空类型的超类型(非空类的根),包含像Int这样的基本数据类型
open 在Kotlin开发中类和方法默认不允许被继承和重写,等同于Java中用 final 修饰类和方法。如果在Kotlin 中类和方法想被继承和重写,需添加open 关键字修饰。
final 表示类不可继承,默认属性
var var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和Java中声明变量的方式一样。
val val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。
const 表示静态属性,在java中并不会生成get set
set(value) {field = value} 重写该属性的get和set
:: 双冒号,表示调用当前 Class 的内部方法
companion 类内部的对象声明可以用 companion 关键字标记,这样它就与外部类关联在一起,我们就可以直接通过外部类访问到对象的内部元素
by 委托,可用于类委托和属性委托
Lazy 延迟属性,第一次调用会有过程,后面就是只有纯结果。lazy 应用于单例模式(if-null-then-init-else-return),而且当且仅当变量被第一次调用的时候,委托方法才会执行。lazy 只用于常量 val
lateinit 告诉编译器我没法第一时间就初始化,但我肯定会在使用它之前完成初始化的。lateinit 只用于变量 var
Not Null 委托不能为空,如果使用的时候为空,则会抛出异常
by Delegates.observable 实现观察者模式,观察属性的变化
by map 把属性储存在映射map中
类型? 表示当前xx对象可以为空
notNull(a,b) notNull(a,b){ xxxx } 同时判断多个变量为空时的逻辑处理
?: foo?:bar,如果foo不为null则返回foo,如果为null则返回bar
xx?.toLong()?: 0 xx如果为null就返回0,否则返回Long类型数值
!! 判断这个参数如果是空参数,就抛出异常
?. 与java相同:if(a!=null){ a.run();}
object.let{} 在函数体内使用it替代object对象访问公有的属性和方法
object.?.let 与java相同:if(a!=null){ a.run();}
object?.let {//非空怎么撸} ?: let {//为空又怎么撸} 判断object非空和为空的逻辑处理
object.apply{} 内联扩展,返回object自身
companion object 伴身对象,kotlin没有静态static的说法,随之代替的是它,具体相关使用Kotlin 对象表达式和对象声明 - 简书 (jianshu.com)
use 代替了java的try-catch-finally
arrayOf 数组
xx in xx 循环
vararg 可变参数,就是类似java的Integer... rest,kotlin语句就是vararg rest: Integer,记得使用rest的时候要在前面加个*,即是 *rest
annotation 注解类
arrayOfNulls 可以用于创建一个指定大小的、所有元素都为空的数组
@Volatile 类似@Synchronized,但是性能优于它,使用volatile必须具备以下2个条件,对变量的写操作不依赖于当前值(比如递增)、该变量没有包含在具有其他变量的不变式中
check(boolean){} 如果boolean为false,抛出异常IllegalStateException
require(boolean){} 如果boolean为false,抛出异常IllegalArgumentException
assert(boolean){} 如果boolean为false,抛出异常AssertionError
sealed 简单来理解就是他是一个拓展版的枚举(enum),不同之处在于枚举的实例是唯一的,而密封类可以有很多实例,它们可以有不同的状态

注解

关键字 注释
@JvmStatic 如果它是函数,则需要从此元素生成额外的静态方法。如果此元素是属性,则应生成额外的静态 getter / setter 方法。

等价代码

作用 java kotlin
实例化 XX xx = new XX() var xx = XX()
实例默认 XX xx var xx : XX
静态变量 private static final String EXTRA_TITLE = "extra_title" private val EXTRA_TITLE = "extra_title"
创建数组 new String[]{MediaStore.Images.ImageColumns.DATA} arrayOf(MediaStore.Images.ImageColumns.DATA)
数组类型 int[] IntArray
类型判断 !(xx instanceof xx) !is
switch switch(xxx) {case A:break;case B: break;default:break;} when(xxx) { A -> B-> else -> {} }
switch 不根据某个变量判断 when {isImage() -> {} isVideo() -> else ->{} }
强制转换 (类型)xxxxx代码 xxxx代码 as 类型
强制转换2 (类型)xxxxx代码 xxx.toLong()
或运算 a |= b a = a or b
internal 适用于内部类使用,如果内部类仅仅使用private,就只能内部类自己访问 internal fun xx()
internal 限制了跨 module 的方法的使用 static final class internal class
internal inner 类似java的内部类,加上inner才可以使用外部变量 class xx internal inner class
接口 public interface xxx interface xxx
字符串格式化,目前Kotlin还没有,只能用java的 String.format java.lang.String.format
范围判断 i>=min && i <=max i in min..max
范围判断2 i>=min && i<max i in min until max
for数组循环 for (int i = 0; i < max; i++) i in 0 until max
for对象循环 for (XXXX item : list) for (item in list)
for相反顺序循环 for (int i = list.size() - 1; i >= 0; i--) for (i in list.indices.reversed())
在方法参数里面new对象 ThreadUtils.executeByIo(new ThreadUtils.BaseSimpleBaseTask<XX>(){}) ThreadUtils.executeByIo(object : BaseSimpleBaseTask<XX>(){})
调用类自身 XXXXX.this this@XXXXX
三次元运算符 xx == null ? a : b xx?.toLong() ?: -1
内部类 class myWebChromeClient : WebChromeClient() { private val myWebChromeClient: WebChromeClient = object : WebChromeClient() {

创建数组的几种方法

val asc1 = arrayOf(1, 2, 4)

val asc2 = arrayOfNulls<Int>(3)
asc2[0] = 1
asc2[1] = 2
asc2[2] = 4

val asc3 = Array(3){ i -> i + 1 }

val asc4 = intArrayOf(1, 2, 4)

val asc5 = IntArray(1){ i -> i + 1}

集合

fun main() {
    var mutableMap = mutableMapOf<Int, String>()
    mutableMap[1] = "a"
    mutableMap[0] = "b"
    mutableMap[1] = "c"
    println(mutableMap)

    var mutableList = mutableListOf<Int>()
    mutableList.add(1)
    mutableList.add(0)
    mutableList.add(1)
    println(mutableList)

    var mutableSet = mutableSetOf<Int>()
    mutableSet.add(1)
    mutableSet.add(0)
    mutableSet.add(1)
    println(mutableSet)
}

输出

{1=c, 0=b}
[1, 0, 1]
[1, 0]
上一篇下一篇

猜你喜欢

热点阅读