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

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

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

96340

Kotlin 编码规约

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

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

转向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不同是,KotlinCharactor不属于数值类型。 Kotlin 提供了一组表示数字内置类型。 对于整数,有四种不同大小类型,因此值范围也不同。...2.2 字符类型 Kotlin中字符类型用Charactor表示,与Java不同是,它们不能直接当作数字,它无法直接使用Char类型ASCII进行算数运算。...拿刚才getScore()函数举例,如果我们不在when句中传入参数的话,还可以这么写: fun getScore(name: String) = when { name == "Tom"...注意,Kotlin中判断字符串或对象是否相等可以直接使用==关键字,而不用像Java那样调用equals()方法。

77510

Kotlin---扩展

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

57830

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

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

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

89810

Kotlin Vocabulary | 密封类 sealed class

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

1.1K10

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

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与三元运算符有着同样命运,它已被Kotlinwhen所取代。

63540

Kotlin基础学习之循环和异常

和 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 语句一样是表达式,可以作为另一个表达式一部分使用。

63610

定语从句

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

63320

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

71520

干货 | 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.4K40

KotlinKotlin基础

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

77310

开源 | 携程机票跨端 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.6K40

Kotlin热身篇: 简介与基本用法

二. 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 全局声明对象只有一个,所以他是天生单例模型 ?

1.6K30
领券