Kotlin基本语法

1、object 修饰的类为静态类。调用时可以 var name = Util.getName();

object Util {
    fun getName(): String {
        return BuildConfig.VERSION_NAME
    }
}

companion object 修改的方法为静态方法。调用时可以var name = Util2.getName(); 同时静态变量也需要申明在companion object下

class Util2 {
    companion object {
        var test:String? = ""
        fun getName(): String {
            return BuildConfig.VERSION_NAME
        }
    }
}

2、var 与 val的区别:
var修饰的变量可以改变值,可以重新赋值。val是一个只读变量,类似java中的final,创建的时候需要被初始化,赋值后不能被改变。

3、kotlin中所有的类默认是final的,如果你需要这个类能够被继承,那么需要将该类修饰为“open”(注意不是public)

//这个类具有`open`属性,可以被其他类继承
open class People: Speakable{
    //`open`的方法被实现和覆写,该方法也是`open`的
    override fun say() {}
    //`final`属性的方法,不可被覆写
    fun sayHello() {}
    //`open`属性的方法,可以被继承和覆写
    open fun sayName() {}
}

kotlin中所有的参数默认是public的,而java中默认是private的,如果kotlin也像java一样写成private,那同样得定义一系列的set()/get(),不然在类外面无法通过对象获取属性。
kotlin: var fileName: String? = null
java: private String fileName;

4、kotlin中是没有三目运算符的说法的

java中的语法
条件判断语句 ? "结果为true" : "结果为false";

kotlin中的语法

if(条件判断语句) "结果为true" else "结果为false"

5、 ?:
kotlin中有 对象A ?: 对象B的写法,?:的意思是当A为null时就返回B

6、关于可变数组

1、var cache1: MutableList<String> = ArrayList() 或
2、var cache2: MutableList<String> = mutableListOf("张三", "李四")
3、var cache3: MutableList<String> = arrayListOf<String>("张三", "李四")

mutableListOf()返回了一个ArrayList对象,从对比中可以看到,1无法初始化可变数组,而2和3可以初始化可变数组。1和3返回的是java的arrayList。

不可变数组

1、var cache1 = listOf<String>("张三", "李四")
2、var cache2 = listOfNotNull(cache1)

2接受任意类型的参数,它的作用是剔除为null的参数,剩下的不为空的数据组成一个list。1和2都是不可变数组,没有add方法。

7、vararg 可变参数
fun test(vararg params: String){}功能等同于Java代码:
void test(String... params)

8、let、with、run、apply
let:一般使用:

object.let{
it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
...
}
//另一种用途 判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
it.todo()
}

with:一般使用:

with(object){
   //todo
 }
val user = User("Kotlin", 1, "1111111")
val result = with(user) {
    println("my name is $name, I am $age years old, my phone number is $phoneNum")
    1000
 }

let和with看似差不多,实际上在使用场景上还是有一些差别的,let可以用来做判空操作,但是with不行,with可以直接访问实例的公有属性和方法,但是let必须要用it来操作,其返回值为函数块的最后一行或指定return表达式(比如这里result=1000)。
一般with可以在viewholder中获取itemData的值的时候使用。

run:一般使用:

object.run{
//todo
}
val user = User("Kotlin", 1, "1111111")
val result = user.run {
    println("my name is $name, I am $age years old, my phone number is $phoneNum")
    1000
 }

通过代码可以看的出来,run结合了let和with两种使用特点,run既可以像let那样做判空处理,又可以像with那样直接使用对象的属性和方法。

apply:一般使用:

object.run{
//todo
}
val user = User("Kotlin", 1, "1111111")
val newUser= user.run {
      name = "lisi"
      age = 2
 }

apply的使用类似run,但是apply返回的类型是当前使用的对象,可用在对对象的初始化中。

also:一般使用:

val obj1 = object.also{
it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
...
}

also的使用跟let很像,不同的是also返回的是使用对象本身,一般用于多个扩展函数链式调用


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,209评论 9 118
  • 在学习Kotlin的过程中,我们会发现一些java中没有的有趣特性,如表现性,安全性,扩展性,函数支持lambda...
    红尘丶阅读 579评论 0 1
  • 包声明 如: 引入类 与Java没啥区别 有多个包会默认导入到每个 Kotlin 文件中: 函数定义 一般函数 函...
    郎官人阅读 408评论 1 0
  • 上篇介绍了Kotlin的特点以及其在Android Studio上的配置步骤,下面接着记录一些Kotlin的基本语...
    ArsenicBing阅读 621评论 0 2
  • 昏昏沉沉,总感觉自己身处梦中!分不清现实还是虚幻! 世界仿佛一幕戏剧,不停的上演着悲欢离合!我独自...
    浅挚绊离兮Xy阅读 237评论 0 0