编译器知道,在完成null检查之后,就可以使用我们的变量,红色波浪线就会从print语句中消失。在第二个例子,我们熟悉的问号再次出现了,但是这一次担任是不同的角色。...Apply是另一个时髦的扩展功能,我们可以在很多情况下使用它,一个常见的用法的就是创建一个需要许多调用的对象,但是没有很好的方法来做到这一点。...第二个功能修复了:它做了一个简单的is检查,在这一点上,Kotlin智能的将该值转换为Int,因此它可以在if语句中使用。...现在我们接触了is和when在一起,现在我们可以绕个弯子谈一谈sealed classes,Kotlin有一个sealed classes的概念,我们可以把它当成一些子类的包装。...,一个密封的超类和三个继承的子类,我们可以很好的处理多态和when以及is的组合。
方法的名称通常是动词或动词短语,说明该方法做什么:close、 readPersons。修改对象或者返回一个新对象的名称也应遵循建议。...,总是将 get 与 set 关键字放在不同的行上: val foo: String get() { …… } 对于具有初始化器的属性,如果初始化器很长,那么在等号后增加一个换行并将初始化器缩进四个空格...{ // 清理 } 在 when 语句中,如果一个分支不止一行,可以考虑用空行将其与相邻的分支块分开: private fun parsePropertyValue(propName: String...每当你有一个主要用于某个对象的函数时,可以考虑使其成为一个以该对象为接收者的扩展函数。为了尽量减少 API 污染,尽可能地限制扩展函数的可见性。...如果一个方法会改动其接收者,那么不要声明为中缀形式。 工厂函数 如果为一个类声明一个工厂函数,那么不要让它与类自身同名。优先使用独特的名称,该名称能表明为何该工厂函数的行为与众不同。
在Java中是这样定义变量的: int a=10; final double b=1.0; String s="Hello"; int ok; 在Kotlin中,定义变量和Java有几点不同之处: 位置不同...2、字符类型 Kotlin语言中,字符类型用Char表示,不过和Java不同的是,Kotlin中不能将字符直接看作是数字。...,找到后执行分支语句; 如果分支中多余一条语句,要使用花括号{}; 满足条件的分支执行后,会自动终止when语句执行,因此,并不用像switch语句中那样每一个case语句都加一个break。...当然,when语句也可以作为表达式来使用,第一个满足条件的最后一条语句作为when语句的返回值: var m=when (a) { 1 -> { println(1) }...小结 尽管Kotlin和Java是无缝衔接的,但在语法上还是有许多不同的,最重要的是编码习惯和观念的改变,因此若想充分掌握Kotlin语言,还需要下一番功夫。
(2021.5.5注:该句有歧义,Koltlin本身就是静态语言,不要误以为其为动态语言) 二 基本类型 Kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型,在 Kotlin 中,所有东西都是对象...与Java不同的是,Kotlin中的Charactor不属于数值类型。 Kotlin 提供了一组表示数字的内置类型。 对于整数,有四种不同大小的类型,因此值的范围也不同。...2.2 字符类型 Kotlin中字符类型用Charactor表示,与Java不同的是,它们不能直接当作数字,它无法直接使用Char类型的ASCII进行算数运算。...拿刚才的getScore()函数举例,如果我们不在when语句中传入参数的话,还可以这么写: fun getScore(name: String) = when { name == "Tom"...注意,Kotlin中判断字符串或对象是否相等可以直接使用==关键字,而不用像Java那样调用equals()方法。
介绍 除了与Java类比的这些功能之外,Kotlin还新增了一些新的概念 数据类(data) 扩展函数 密封类(sealed) 匿名类 伴生对象(Companion) 数据类 通过data关键字来定义数据类...通常用来定义纯数据类型的结构体。定义的数据类只能有一个主构造函数定义该数据类中的变量。...而该函数内有this指针,代表着调用该函数的对象,可以直接访问这个对象的成员 fun ClassName.Function():ReturnType{ // TODO } 例如:接上述代码,有一个类...同样,Kotlin也支持扩展属性,与函数类似定义。 密封类 密封类用来表示受限制的类继承结构。由于enum每一个实例都是一个常量,所以密封类被开发,密封类的子类可以有多个实例。...,在when子句中判断类型 fun choose(data: SealedClass) { when(data){ is SealedConstClass ->
一个OOP版本的HelloWorld 正式上架:《Kotlin极简教程》Official on shelves: Kotlin Programming minimalist tutorial 京东...对象声明 继承 在Kotlin所有的类中都有一个共同的父类Any,这是一个默认的父类且没有父类型声明: class Example // Implicitly inherits from Any Any...注意,在这种情况下,不同的二级构造函数可以调用基类型的不同的构造: class MyView : View { constructor(ctx: Context) : super(ctx) {...如果你需要写一个可以调用的函数,而不依赖一个类的实例,但需要访问的内部一个类(例如,一个工厂方法),你可以写为[对象声明](object_declarations.html)中的一员里面的那个类。...更具体地讲,如果你声明一个同伴对象在你的的类中, 你就可以在Java/ C#中调用与它的成员方法相同的语法的静态方法,只使用类名作为一个修饰语。
密封类与枚举类 : ① 相同点 ( 类型限制 ) : 从类型种类角度对比 , 类与枚举类类似 , 枚举类的值的集合是受限制的 , 不能随意扩展 ; ② 不同点 ( 对象个数限制 ) : 从每个类型对象个数对比..., 枚举类的每个类型只能存在一个实例 , 而密封类的每个类型可以创建无数个实例 ; II ....密封类子类 : ① 定义在密封类内部 ( 推荐 ) : 密封类的子类建议定义在密封类内部 , 可以兼容所有版本 ; ② 定义在密封类所在文件 : Kotlin 1.1 以后的版本 , 可以将密封类子类定义在密封类声明的同一个文件中...密封类孙子类 : 密封类子类也可以被继承 , 其孙子类没有继承限制 , 可以在其它类中继承定义 ; 5 . when 语句 : 在 when 语句中判定 , 必须有 else 其它情况进行兜底 , 但是判定密封类子类时...() //打游戏 studentAction(badStudent) } /** * 根据不同的类型执行不同的方法 */ fun studentAction(student :
when表达式功能强大when Kotlin对此when 。 您可以混合使用任何种类的谓词表达式,类似于SQL的CASE表达式。...那么,为什么不同时允许使用相同的语法访问地图元素呢? ...Java 8 Stream API( 另一个此类库是StreamEx ,重点稍有不同)。...同样,这是一个有争议的话题。 例如,因为 @rafaelcodes面向对象的优点是什么?...进行这种欺骗对于面向对象的应用程序设计是一个巨大的风险,这就是为什么此功能可能不会将其纳入Java的原因。 7.安全呼叫接线员(以及:猫王接线员) 可选的是meh。
子类可以是任意的类: 数据类、Kotlin 对象、普通的类,甚至也可以是另一个密封类。但不同于抽象类的是,您必须把层级声明在同一文件中,或者嵌套在类的内部。...在 when 语句中,我们常常需要处理所有可能的类型: when(result) { is Result.Success -> { } is Result.Error...使用 when 语句处理密封类时,如果没有覆盖所有情况,可以让编译器给我们一个错误提示。...,所以 IDE 可以帮我们补全 when 语句下的所有分支: 当涉及到一个层级复杂的密封类时,这个功能会显得更加好用,因为 IDE 依然可以识别所有的分支: sealed class Result<out...Result 是一个抽象类,并且包含两个构造方法: 一个私有的默认构造方法 一个合成构造方法,只有 Kotlin 编译器可以使用 这意味着其他的类无法直接调用密封类的构造方法。
CastProperty 类来保存要处理的源对象和目标对象,并且把这组对象放到一个CastProperty 列表的mProperties 静态对象里面缓存起来。...getterType, obj, propInfo.GetGetMethod()); 这里的obj 要么是一个对象实例,要么是null,如果是null,那么这个委托定义只能绑定到类型的静态属性方法上;如果不是...null,那么这个委托只能绑定到当前 obj 实例对象上,换句话说,如果将来用obj类型的另外一个实例对象,那么这个委托访问的还是之前那个obj 对象,跟新对象实例无关。...">源对象 /// 目标对象,如果为空,将生成一个 /// 复制过后的目标对象...source.GetType(), typeof(T)).Cast(source, target); return target; } } 这样,该小程序可以象下面以几种不同的形式来使用了
快速介绍Kotlin的用法。有些地方会和Java进行类比。 变量声明 Kotlin 使用两个不同的关键字(即 val 和 var)来声明变量。 val 用于值从不更改的变量。...随着条件语句的复杂性不断增加,您可以考虑将 if-else 表达式替换为 when 表达式,如以下示例所示: val answerString = when { count == 42...else -> "The answer eludes me." } println(answerString) when 表达式中的每个分支都由一个条件、一个箭头 (->) 和一个结果来表示...如果箭头左侧的条件求值为 true,则会返回右侧的表达式结果。请注意,执行并不是从一个分支跳转到下一个分支。when 表达式示例中的代码在功能上与上一个示例中的代码等效,但可以说更易读。...函数可以修改状态,从而帮助您只公开希望公开的数据。这种访问控制机制属于一个更大的面向对象的概念(称为“封装”)。 在以下示例中,doorLock 属性对 Car 类外部的一切都不公开。
① Kotlin变量 在Kotlin中声明变量有一些不同,我们有关键字val和var,这看起来很相似,但其实有一个重要的区别: 当变量被声明为val时是不可变的(只读),你只能给它分配一次值。...对于这些类型的数据传输对象。Kotlin引入了一个关键字来定义它们:data class。...SingletonClass.sayIt() // Hello world Companied对象是略有不同的,它在一个类中定义,它仍然是一个单例,它可以使用包装类的名称来访问。...CompaniedClass.sayIt() // Hello world 4、控制流程(if,when,for) a、if if在Kotlin中的语句或多或少与Java类似,下面我们来看一下它们的不同...如果Kotlin语句实际上是表达式,它返回它们块中的最后一个值, b、when 我们常用的switch-case与三元运算符有着同样的命运,它已被Kotlin的when所取代。
和 setter 方法 3.支持Java 8提供的新特性,Lambda表达式,函数式接口,流API等 … 引言 在 Kotlin 的循环语句中,while 循环还有 do…while 循环和 Java...中是一致的,在这里就不再细说,而for 循环则和 Java 中有了很大的区别,异常处理也有了不同。...而在 Kotlin 中,for 循环没有这样的用法,但是为了替代这种常见用法,Kotlin 使用了区间的概念。 区别在本质上就是两个值之间的间隔,一个初始值,一个结束值,使用 .....Kotlin 中使用 in 来检查一个值是否在区间中,或者它的逆运算 !in。同时 in 也可以作为 when 的分支。...同时 Kotlin 中的 throw 结构以及 try…catch 结构和 Kotlin 中的 if 语句一样是表达式,可以作为另一个表达式的一部分使用。
无成分,有含义的连词的注意事项 介词+which的两种情况 方法: 将先行词带到从句中,从句与先行词用哪个介词连接,就填哪个介词。.... ---- 非限制性定语从句中的固定句式 名/代/数 of+which/whom…....学会区分定语从句与同位语从句 The reason why he didn’t come was that he was injured....介词+连词的情况 替代when,where,why 固定搭配或者根据句意 非限制性定语从句的注意事项 固定句式 名/代/数+of+which/whom 全部的定语从句的注意事项 注意事项...定语从句中,连词作宾语时,连词可以省略 定语从句中,连词之前有介词时,连词作成分,用which/whom 定语从句中,连词之前有介词时,连词不做成分,用which 学会区分定语从句与同位语从句
如果局部变量嵌⼊到SQL语句中,由于局部变量名前没有“@”符号,这就要求局部变量名不能与表字段名同名,否则将出现⽆法预期的结果。...create function函数名(参数1,参数2,…)returns返回值的数据类型 begin [函数选项] 函数体; return语句; end; ⾃定义函数是数据库的对象...函数必须指定返回值数据类型,且须与return语句中的返回值的数据类型相近(⻓度可以不同)。 函数选项: contains sql:表示函数体中不包含读或写数据的语句(例如set命令等)。...[else语句块n] end if; 或 case 表达式 when value1 then语句块1; when value2 then语句块2; when value3 then语句块3;...相当于java语⾔中的continue): iterate 循环标 repeat语句 当条件表达式的值为false时,反复执⾏循环,直到条件表达式的值为true [循环标签:]repeat 循环体;
例如: val languages = arrayListOf("Java") // 声明不可变引用 languages.add("Kotlin") // 改变引用指向的对象...1、在 when 结构中使用任意对象 fun mix(c1: Color, c2: Color) = { // when 表达式的实参可以是任何对象,它被检查是否与分支条件对等...” 的分支 /** * 一个函数要么具有不是代码块的表达式函数体, * 要么具有包含显示return语句的代码块函数体 */ // 在分支中含有混合操作的 when...* 和java不同的是,Kotlin中throw结构是一个表达式,能作为另一个表达式的一部分使用: */ val number = 8 val percentage2...字符串模板帮组你避免繁琐的字符串拼接。在变量名称前加上 ? {} 包围一个表达式,来把值注入到字符串中。 值对象类在Kotlin中以简洁的方式表示。 熟悉的if现在是带返回值的表达式。
不过大部分开发者对Kotlin的使用,仍然局限于把Java代码逻辑按照Kotlin语法进行转换的层面,其实Kotlin和Java虽然具有很强的互操作性,但本质上还是两种完全不同设计思想的语言。...04 强大的when语句 Kotlin中没有switch操作符,而是使用when语句来替代。同样的,when 将它的参数和所有的分支条件顺序比较,直到某个分支满足条件。...说起if else 链,我们可以直接用when语句把它给替换掉: ? 05对象比较 Java的 == 操作符是比较引用值,但Kotlin 的 == 操作符是比较内容, === 才是比较引用值。...所以无论对于什么对象,调用toString方法不会发生Crash. 07 关键字object 前面说过,Kotlin中一切皆为对象,object在Kotlin中是一个关键字,笼统来说是代表“对象”,在不同场景中有不同用法...第一个是对象表达式,可以直接创建一个继承自某个(或某些)类型的匿名类的对象,而无须先创建这个对象的类。这一点跟Java是类似的: ? 第二,对象字面量。
例如: val languages = arrayListOf("Java") // 声明不可变引用 languages.add("Kotlin") // 改变引用指向的对象...when 结构中使用任意对象 fun mix(c1: Color, c2: Color) = { // when 表达式的实参可以是任何对象,它被检查是否与分支条件对等...” 的分支 /** * 一个函数要么具有不是代码块的表达式函数体, * 要么具有包含显示return语句的代码块函数体 */ // 在分支中含有混合操作的 when...* 和java不同的是,Kotlin中throw结构是一个表达式,能作为另一个表达式的一部分使用: */ val number = 8 val percentage2...字符串模板帮组你避免繁琐的字符串拼接。在变量名称前加上 $ 前缀或者用 ${} 包围一个表达式,来把值注入到字符串中。 值对象类在Kotlin中以简洁的方式表示。 熟悉的if现在是带返回值的表达式。
(3)支持直接将对象序列化为 SQL 语句(例如 UPDATE 语句中的 SET 子句),且支持将查询结果反序列化为 Kotlin 对象。 (4)Size 不能过大。...再往上就到了 KMM common 层,我们希望 DSL API 的实现应该是完全平台无关的, 因此我们需要 sqllin-dsl 的下层提供了一个叫做 sqllin-driver 的模块,它在不同的平台上提供不同的具体实现...谓语通过中缀函数实现,不同的表示操作的中缀函数接收不同类型的参数,例如我们看到 INSERT 直接接收一个对象的 List 即可完成插入操作。...在 KSP 诞生之前,开发者通常使用 KAPT 来进行注解处理和代码生成,但其二者处理 Kotlin 的阶段不同,如下图所示: Kotlin 的编译大概分为两个阶段,第一个阶段由编译器前端进行,它将...使用 val 声明的属性用于在条件语句中表示列名,而使用 var 声明的则是 SetClause 的扩展属性,用于在 SET 子句中设置一个新值。
二. kotlin 和 java8 的相同点 kotlin 和 java8 的相同点我总结了三个,第一个是: 它们都是面向对象和函数式编程语言,第二个是: 它们都是强类型静态语言,最后一个就是它们都符合...说完共同点我们再聊聊他们的不同点吧~ 三. kotlin 和 java8 的不同点 kotlin 和 java8 的不同挺多的,我简单的归纳了一下: Kotlin 可以用操作符简洁的判空 Kotlin.../** * 把功能的名字转换为对应存储数据对象 * */ fun nameToInfoClass(name: String): Class { return when...枚举和 when 表达式 5.8.2.1 kotlin 枚举 Kotlin 中,枚举类型以类的形式存在,因此叫做枚举类,详细代码如下: enum class Color { RED, GREEN...6.2 kotlin 类 6.2.2 kotlin object 类 object 全局声明的对象只有一个,所以他是天生的单例模型 ?
领取专属 10元无门槛券
手把手带您无忧上云