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

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

编译器知道,在完成null检查之后,就可以使用我们的变量,红色波浪线就会从print语句中消失。在第二个例子,我们熟悉的问号再次出现了,但是这一次担任是不同的角色。...Apply是另一个时髦的扩展功能,我们可以在很多情况下使用它,一个常见的用法的就是创建一个需要许多调用的对象,但是没有很好的方法来做到这一点。...第二个功能修复了:它做了一个简单的is检查,在这一点上,Kotlin智能的将该值转换为Int,因此它可以在if语句中使用。...现在我们接触了is和when在一起,现在我们可以绕个弯子谈一谈sealed classes,Kotlin有一个sealed classes的概念,我们可以把它当成一些子类的包装。...,一个密封的超类和三个继承的子类,我们可以很好的处理多态和when以及is的组合。

98940

Kotlin 编码规约

方法的名称通常是动词或动词短语,说明该方法做什么:close、 readPersons。修改对象或者返回一个新对象的名称也应遵循建议。...,总是将 get 与 set 关键字放在不同的行上: val foo: String get() { …… } 对于具有初始化器的属性,如果初始化器很长,那么在等号后增加一个换行并将初始化器缩进四个空格...{ // 清理 } 在 when 语句中,如果一个分支不止一行,可以考虑用空行将其与相邻的分支块分开: private fun parsePropertyValue(propName: String...每当你有一个主要用于某个对象的函数时,可以考虑使其成为一个以该对象为接收者的扩展函数。为了尽量减少 API 污染,尽可能地限制扩展函数的可见性。...如果一个方法会改动其接收者,那么不要声明为中缀形式。 工厂函数 如果为一个类声明一个工厂函数,那么不要让它与类自身同名。优先使用独特的名称,该名称能表明为何该工厂函数的行为与众不同。

3.2K22
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    转向Kotlin——基础知识

    在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语言,还需要下一番功夫。

    1.1K10

    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()方法。

    82510

    Kotlin---扩展

    介绍 除了与Java类比的这些功能之外,Kotlin还新增了一些新的概念 数据类(data) 扩展函数 密封类(sealed) 匿名类 伴生对象(Companion) 数据类 通过data关键字来定义数据类...通常用来定义纯数据类型的结构体。定义的数据类只能有一个主构造函数定义该数据类中的变量。...而该函数内有this指针,代表着调用该函数的对象,可以直接访问这个对象的成员 fun ClassName.Function():ReturnType{ // TODO } 例如:接上述代码,有一个类...同样,Kotlin也支持扩展属性,与函数类似定义。 密封类 密封类用来表示受限制的类继承结构。由于enum每一个实例都是一个常量,所以密封类被开发,密封类的子类可以有多个实例。...,在when子句中判断类型 fun choose(data: SealedClass) { when(data){ is SealedConstClass ->

    60730

    《Kotlin极简教程》第五章 Kotlin面向对象编程(OOP)一个OOP版本的HelloWorld构造函数传参Data Class定义接口&实现之写pojo bean定一个Rectangle对象封

    一个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#中调用与它的成员方法相同的语法的静态方法,只使用类名作为一个修饰语。

    1.5K40

    【Kotlin】Kotlin Sealed 密封类 ( 密封类声明 | 密封类子类定义 | 密封类特点 | 代码示例 )

    密封类与枚举类 : ① 相同点 ( 类型限制 ) : 从类型种类角度对比 , 类与枚举类类似 , 枚举类的值的集合是受限制的 , 不能随意扩展 ; ② 不同点 ( 对象个数限制 ) : 从每个类型对象个数对比..., 枚举类的每个类型只能存在一个实例 , 而密封类的每个类型可以创建无数个实例 ; II ....密封类子类 : ① 定义在密封类内部 ( 推荐 ) : 密封类的子类建议定义在密封类内部 , 可以兼容所有版本 ; ② 定义在密封类所在文件 : Kotlin 1.1 以后的版本 , 可以将密封类子类定义在密封类声明的同一个文件中...密封类孙子类 : 密封类子类也可以被继承 , 其孙子类没有继承限制 , 可以在其它类中继承定义 ; 5 . when 语句 : 在 when 语句中判定 , 必须有 else 其它情况进行兜底 , 但是判定密封类子类时...() //打游戏 studentAction(badStudent) } /** * 根据不同的类型执行不同的方法 */ fun studentAction(student :

    1.4K10

    Kotlin Vocabulary | 密封类 sealed class

    子类可以是任意的类: 数据类、Kotlin 对象、普通的类,甚至也可以是另一个密封类。但不同于抽象类的是,您必须把层级声明在同一文件中,或者嵌套在类的内部。...在 when 语句中,我们常常需要处理所有可能的类型: when(result) { is Result.Success -> { } is Result.Error...使用 when 语句处理密封类时,如果没有覆盖所有情况,可以让编译器给我们一个错误提示。...,所以 IDE 可以帮我们补全 when 语句下的所有分支: 当涉及到一个层级复杂的密封类时,这个功能会显得更加好用,因为 IDE 依然可以识别所有的分支: sealed class Result一个抽象类,并且包含两个构造方法: 一个私有的默认构造方法 一个合成构造方法,只有 Kotlin 编译器可以使用 这意味着其他的类无法直接调用密封类的构造方法。

    1.2K10

    使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝

    CastProperty 类来保存要处理的源对象和目标对象,并且把这组对象放到一个CastProperty 列表的mProperties 静态对象里面缓存起来。...getterType, obj, propInfo.GetGetMethod()); 这里的obj 要么是一个对象实例,要么是null,如果是null,那么这个委托定义只能绑定到类型的静态属性方法上;如果不是...null,那么这个委托只能绑定到当前 obj 实例对象上,换句话说,如果将来用obj类型的另外一个实例对象,那么这个委托访问的还是之前那个obj 对象,跟新对象实例无关。...">源对象 /// 目标对象,如果为空,将生成一个 /// 复制过后的目标对象...source.GetType(), typeof(T)).Cast(source, target); return target; } } 这样,该小程序可以象下面以几种不同的形式来使用了

    1.9K90

    Kotlin快速上手

    快速介绍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 类外部的一切都不公开。

    1.2K10

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

    ① 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所取代。

    66540

    Kotlin | 2.Kotlin基础

    例如: 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现在是带返回值的表达式。

    74220

    定语从句

    无成分,有含义的连词的注意事项 介词+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 学会区分定语从句与同位语从句

    65720

    干货 | Kotlin超棒的语言特性

    不过大部分开发者对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是类似的: ? 第二,对象字面量。

    1.5K40

    【Kotlin 】Kotlin基础

    例如: 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现在是带返回值的表达式。

    81210

    5. MySQL编程基础

    如果局部变量嵌⼊到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 循环体;

    2.3K10

    开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

    (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 子句中设置一个新值。

    1.7K40
    领券