首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

31 天,从浅到深轻松学习 Kotlin

将$放在变量名的前面去表达字符串中的变量和表达式。使用 ${expression} 求表达式的。 Day 4:When 表达式 强大的 switch!...Day 5:循环,范围表达式与解构 for 循环在与其他两种 Kotlin 特性一起使用时可以获得超级能力:范围表达式和解构。...Day 7:解构声明 Android KTX 使用解构来分配颜色的组件。您可以在您的类中使用解构,或者扩展现有的类来添加解构。...Day 17:Lateinit Android 中,在 onCreate 或者其它的回调初始化对象,但在 Kotlin 中不为空的对象必须初始化。那么怎么办呢?可以输入 lateinit。...如果检查的为 false,它将抛出 IllegalStateException。 Day 19:内联 (InLine) 等不及要使用 lambdas 来生成一个的接口?

2.2K30

Kotlin的延迟初始化: lateinit var和by lazy

= null //不报错 可是有的时候,我并不想声明一个类型可空的对象,而且我也没办法在对象一明的时候就为它初始化,那么这时就需要用到Kotlin提供的延迟初始化。...Kotlin中有两种延迟初始化的方式。一种是lateinit var,一种是by lazy。...lateinit var private lateinit var name: String lateinit var只能用来修饰类属性,不能用来修饰局部变量,并且只能用来修饰对象,不能用来修饰基本类型...lateinit var的作用也比较简单,就是让编译期在检查时不要因为属性变量未被初始化而报错。...Kotlin相信当开发者显式使用lateinit var 关键字的时候,他一定也会在后面某个合理的时机将该属性对象初始化的(然而,谁知道呢,也许他用完才想起还没初始化)。

3.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

介绍Kotlin第一部分(翻译篇)

1、介绍Kotlin Kotlin是jvm的开发语言。 谷歌推广Kotlin作为其基于java的Android平台上的第一类语言在五月份。从那之后我就纳闷:这是什么语言?...既然您已经熟悉了这些,就没有必要学习的东西,Gradle/Maven插件:引入Kotlin的构建过程和构建工具。 您可以通过添加Kotlin插件在您的Gradle/Maven中构建脚本。...① Kotlin变量Kotlin中声明变量有一些不同,我们有关键字val和var,这看起来很相似,但其实有一个重要的区别: 当变量被声明为val时是不可变的(只读),你只能给它分配一次。...我们也可以去获取component数据类对象,这些组件函数通过解构来访问数据类中数据的一种方式。这有利于通过简单的一行调用来获取数据类中的单个属性。...val (str, num) = peeta 有了这个技巧,我们的变量str和num的分别为"Goodbye"和3。请注意,解构变量的顺序取决于数据类中属性的顺序;这些名字根本不重要。

63540

Kotlin | 一份10万字的随查笔记,妈妈再也不担心我不会Ctrl+F了

我们无法改变时代的走向,但至少别被远远拉在后面,我们可能无法改变我们的学历,家室,但未来是由我们自己来决定的。做一个永远的学习者,永远保持对技术的热爱。 Kotlin学习之路 什么是Kotlin?...属性初始化 属性的初始化尽量在构造方法中完成 无法在构造方法中初始化,尝试降级为局部变量 var 用 lateinit 延迟初始化,val 用 lazy 可空类型谨慎用 null 直接初始化 class...对于某些传比较固定的参数,偏函数可以将其绑定,然后生成的函数,而的函数只需要给除已绑定的参数之外的参数传,当然你也可以视同 默认参数+具名参数 的方式来实现参数的固定,如果需要固定的参数在中间...") } println("\n 忽略某些解构") //如果你不想解构某些变量,则通过 _ 标志 for ((name, _) in map) println...(name) println("\n lambda中使用解构") //使用解构返回一个的map,key不变,返回的只是value的改变 val maps = map.mapValues

2.6K20

Android面试题之Kotlin的几种常见的类

return "ccc" } lateinit和by lazy lateinit只修饰var,lazy修饰val lateinit var只能用来修饰类属性,不能用来修饰局部变量,并且只能用来修饰对象...,不能用来修饰基本类型(因为基本类型的属性在类加载后的准备阶段都会被初始化为默认)。...lateinit var让编译期在检查时不要因为属性变量未被初始化而报错,也就是去掉了属性上的@NotNull修饰 by lazy后面的表达式只在第一次调用时执行一次,后续只返回结果 by lazy可以使用于类属性或者局部变量...类里面的属性按从上往下顺序初始化,在调用方法函数时,一定要确保属性已经初始化完成 继承 默认不可继承,如果要开放,需要open关键字 可以被覆写的方法也要open关键字修饰 用 is 来判断类型,用as来手动转换类型,并且kotlin...实现了copy函数,调用copy函数会生成一个对象,构造方法走的是主构造方法,不会走次构造方法,也就是次构造函数里初始化的属性不会copy过来 支持解构语法 支持运算符重载 数据类使用条件 经常需要比较

6210

Kotlin:关键字之lateinit

Kotlin中定义变量或者属性都是需要初始化的,并且其都是private的,但是有些时候对于变量或者属性只需要声明,但是不需要初始化,则kotlin提供了lateinit关键字来实现: class...,char,short ,int,long,float,double) 也许有人会问到为什么为什么不可以修饰原始数据类型 对于对象类型,Kotlin使用 null ,以标记 lateinit 属性尚未初始化...对于原始类型,没有这样的,因此无法将属性标记为未初始化并提供的诊断信息lateinit 需要提供。...(我们可以尝试使用某种单独的标记,但是在通过反射初始化字段时不会更新该标记,这是 lateinit 的主要用例)。...因此,仅对象类型的属性支持 lateinit 但是 lateinit 是一个坑,对于新手来说还是一个不小的坑 在 Kotlin 代码中慎用 lateinit 属性 这位作者解释的很清楚了 对于 Kotlin

89920

第4章 类与面向对象编程第4章 类与面向对象编程

因此,每一个对象包含两部分:成员变量和成员方法。在成员方法中可以改变成员变量。 2.程序是对象的集合,他们通过发送消息来告知彼此所要做的事情,也就是调用相应的成员函数。...3.每一个对象都有自己的由其他对象所构成的存储,也就是说在创建对象的时候可以在成员变量中使用已存在的对象。...override关键字,重写toString() return "Person(name='$name', age=$age, sex='$sex')" } } 使用这样的简洁语法,可以通过主构造器来定义属性并初始化属性...(这里的属性可以是var或val)。...普通的嵌套类,没有持有外部类的引用,所以是无法访问外部类的变量的: class NestedClassesDemo { class Outer { private val zero: Int

1.7K20

Kotlin 究竟该不该用 lateinit

因为被 lateinit 标记的变量,不再接受空安全检查,它的表现更像是一个普通的 Java 变量。...为了减少程序运行的不确定性,我更希望尽可能使用 lateinit 代替 nullable。 另一个原因是既然 Kotlin 语言设计者提供这样的关键字,说明是有可用之处的。...只要是符合以下条件,我就会使用 lateinit 修饰属性: 该属性在对象构造时无法初始化(缺少必要参数),在某个阶段被初始化之后会一直使用。...在 Java 中我们通过增加一堆空判断来解决这个问题,Kotlin 可以使用 nullable 对象。 而 lateinit 通过舍弃空安全机制,把空安全交回到开发者手上(就像 Java 那样)。...代码是不断迭代的,维护者可能不止一个人,而 lateinit 对空指针问题的保护不足,容易让的空指针问题出现在代码迭代之后。

1.9K20

变量声明和变量状态设计

本篇文章将会介绍如何通过正确的变量状态设计来达到简化代码逻辑的效果。 本篇并不是针对 Kotlin 的语言特性介绍,但它比语言特性更为重要。...2. lateinit 说到尽量声明为非空类型,有人就会提出质疑了:非空类型说来简单,但部分依赖外部调用完成初始化的变量无法声明为非空类型啊?...针对这种情况,可以使用 Kotlinlateinit 关键字。lateinit 人如其名,它表示这个对象会在稍后被初始化。...所以使用 lateinit 关键字,就需要你自己保证调用顺序,保证调用时变量已经被初始化,Kotlin 不再帮你把关了。...无法满足空对象,看看是否可以用 lateinit 声明为可空变量 版权所有,转载请注明出处: https://sickworm.com/?

1.6K30

Kotlin学习笔记(二)-程序结构(上 )

[TOC] 前言 上节我们主要讲了Kotlin的数据类型,这节我们主要从程序结构,包括方法,类成员,运算符的角度去认识Kotlin 常量与变量 上一节我们已经用到了用val,var来修饰属性。...s2="A" //直接指向 而不是变量Kotlin: val S1:String="A" var s2:String =S1 运行时字节码: static{ s2=S1//这里没有直接指向...S1的 所以是编译期常量 } 变量(var) var = variable var x ="HelloWorld"//定义变量 x ="HiWorl"//再次赋值 类型推导 编译器可以推导量的类型...Kotlin Unit相当于Java的Void无返回 } 这几个例子应该覆盖了我们会用到的大部分例子的类比了。...建议val/var修饰的属性最好直接初始化或是在构造方法中初始化,如果不可以就降级为局部变量** lateinit延时初始化,不可以修饰val,不可以修饰基本数据类型(因为基本数据类型有默认),理智使用

60320

不要用Java的语法思维来写Kotlin

依赖倒转,对象的创建是通过spring完成的,而val要求定义的时候初始化 /** * Created by quanke on 2018/1/9....例如,如果一个员工Quanke可能会(或者不会)分配给一个部门, 并且可能有另外一个员工是该部门的负责人,那么获取 Quanke 所在部门负责人(如果有的话)的名字,我们写作: quanke?....,hashcode和equals等方法 5.请忘记三元运算符 在 Kotlin 中,if是一个表达式,即它会返回一个。...var局部变量—适用于变量在类型检查和使用之间没有修改,且不在修改它的lambda中捕获!...函数的返回可以是null 8.真的要习惯Koltin的for循环,太强大了 Kotlin没有Java中的for(初始;条件;增减步长)这个规则。

3K40

浅谈Kotlin(六):lateinit、by lazy 使用

Kotlin中有两种延迟初始化的方式。一种是lateinit var,一种是by lazy。...一、lateinit的使用 按Java的写法,此时即代表datas默认为null,但是因为Kotlin的非空机制,这里给出了两种选择,要不给一个初始,要不增加lateInit修饰 则可以这么写:...*/ 也可以这么写: 表示我先不给一个初始,编译期的时候也无需进行非空判断,后面我会找时机给他赋值 即late的作用为编译期在检查时不要因为属性变量未被初始化而报错 lateinit var datas...:ArrayList 当然若在使用该变量的时候仍未给赋值,则会报错 Caused by: kotlin.UninitializedPropertyAccessException: lateinit...property datas has not been initialized lateinit使用限制: 只能用来修饰类属性,不能用来修饰局部变量, 只能用来修饰对象,不能用来修饰基本类型(因为基本类型的属性在类加载后的准备阶段都会被初始化为默认

2.7K32

Kotlin 1.2 的新增特性

Lateinit 顶级属性和局部变量 lateinit 修饰符现在可以用在顶级属性和局部变量上。...例如,当一个 lambda 作为构造函数参数传递给一个对象时,后者可以用于引用另一个必须稍后定义的对象: lateinit修饰符现在可以用在顶级属性和局部变量上。...目标平台:运行 Kotlin 1.2.0 版本的 JVM 检查一个 lateinit 变量是否被初始化 现在可以在属性引用上使用 isInitialized 来检查 lateinit 变量是否已经被初始化...“手工”的解决方法是将控制流的子表达式的存储在变量中,而不是直接在调用参数中对它们进行求值。它类似于 -Xnormalize-constructor-calls=enable。...破坏性变更:通过内联的扩展接收器修复平台的 null 转义 在平台类型空上调用的内联扩展函数并没有检查接收器是否为 null,并因此允许 null 转义到其他代码中。

2.8K70

写了多年的Java,直到看到Kotlin,原来代码可以如此优雅!

lateinit 不支持基础数据类型,比如 Int。...例如,如果一个员工Quanke可能会(或者不会)分配给一个部门, 并且可能有另外一个员工是该部门的负责人,那么获取 Quanke 所在部门负责人(如果有的话)的名字,我们写作: quanke?....,hashcode和equals等方法 5.请忘记三元运算符 在 Kotlin 中,if是一个表达式,即它会返回一个。...var局部变量—适用于变量在类型检查和使用之间没有修改,且不在修改它的lambda中捕获! var属性-不适用(因为该变量可随时被修改) 安全(可空)转换-操作符as?...函数的返回可以是null 8.真的要习惯Koltin的for循环,太强大了 Kotlin没有Java中的for(初始;条件;增减步长)这个规则。

3.3K40

Kotlin 1.2 的新增了哪些特性?

Lateinit 顶级属性和局部变量 lateinit 修饰符现在可以用在顶级属性和局部变量上。...例如,当一个 lambda 作为构造函数参数传递给一个对象时,后者可以用于引用另一个必须稍后定义的对象: lateinit修饰符现在可以用在顶级属性和局部变量上。...目标平台:运行 Kotlin 1.2.0 版本的 JVM 检查一个 lateinit 变量是否被初始化 现在可以在属性引用上使用 isInitialized 来检查 lateinit 变量是否已经被初始化...“手工”的解决方法是将控制流的子表达式的存储在变量中,而不是直接在调用参数中对它们进行求值。它类似于 -Xnormalize-constructor-calls=enable。...破坏性变更:通过内联的扩展接收器修复平台的 null 转义 在平台类型空上调用的内联扩展函数并没有检查接收器是否为 null,并因此允许 null 转义到其他代码中。

2.8K10

最强总结 | 带你快速搞定kotlin开发(上篇)

1.2 变量: var age:Int = 18 val name:String = "Kotlin" val person = Person() 使用var来声明可读可写变量,使用val来声明只读变量...可以看到实例化Person对象时,并没有声明变量类型,这就是Kotlin的“类型推断”,会自动推断出是Person类型的变量,而且是不需要Java中的new关键字的。...强行调用符 1.5 lateinit关键字 lateinit var person: Person person = Person() 我们总有场景在声明的时候不知道赋什么,在后面才去赋值的场景...但是只能在以下场景下使用: var声明的变量 lateinit修饰的变量不可空、不能是基本数据类型、不能有初始 构造器中初始化的变量不需要使用lateinit关键字 1.6 类型判断 if(p is...「 类名.this 例如 Outer.this 」 获取目标类引用 在 Kotlin通过「this@类名 例如this@Outer」获取目标类引用

52910

Kotlin 开发中遇到的坑(持续更新)

但是在kotlin中,当mUser为null时,mUser?.grade的取值为null,而null != -1 ,在kotlin是成立的,这就不符合我们实际逻辑了。 解决方法如下:通过 ?...但是可以通过自定义 getter 函数来返回不同的: class Person(val birthDay: DateTime) { val age: Int get() = yearsBetween...同时多次调用有相同的返回。 3.2、使用 lateinit 有些情况我们不能使用 val,比如,在 Android 中某些属性需要在 onCreate() 方法中初始化。...对于这种情况,Kotlin 提供了 lateinit 关键字。...8.1、apply plugin:'kotlin-android-extensions'引用问题 大家都知道@Parcelize使用需要在module的build.gradle中配置两个地方: //这个插件提供了很多特性

4.3K02

Kotlin Android】一个列表带你领略Kotlin简洁之风

= null 或 lateinit var 变量名: 变量类型 如: var value: Int = 1 或 var value = 1 或 var value: Int?...= null lateinit var value: A //A为非基础类型的类 第一种方式,最完整的声明方式; 第二种方式,省略变量类型声明,直接赋值,因为Kotlin带有自动推断变量类型的功能;...来表明这个变量有可能为null,并赋值为null; 第四种方式,如果你只想声明变量,那么可以使用lateinit关键来表明该变量在后面才进行初始化(注:基础类变量不能指定为lateinit,并且lateinit...通过以上可以看出来,Kotlin无与伦比的简洁之处,当然其还有更强大的,更简洁的地方,我们继续来看看。 2....接下来,新建SimplerAdapter类,通过右键->New->Kotlin File/Class,即可新建一个kotlin文件 class SimpleAdapter: RecyclerView.Adapter

1.8K10

Kotlin知识点面试点2

前言 今天继续kotlin相关的知识点和常考考点,通过这些问答相信你也能更一步了解Kotlin。 可以定义同名的扩展方法吗 在同一个包名下,是不可以定义相同类相同方法名的扩展方法的。...和by lazy 上篇说过,Kotlin有空限制,所以有些变量如果不想设置为空的时候初始化该怎么做呢?...这就用到延迟初始化了,lateinit和by lazy都能实现。...lateinit lateinit用于修饰var变量,它会让编译器暂时忽略初始化这个事情,到后面用的时候我们在进行初始化,但是不能用到基本数据类型,比如int,double这种。...lateinit var test: String by lazy by lazy用于val类型的变量,它会暂时不进行初始化,并且在第一次使用的时候自动调用我们设置好的表达式进行初始化。

91920

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券