
Kotlin
文章平均质量分 83
Kotlin学习
Air Field
这个作者很懒,什么都没留下…
展开
-
Kotlin let、with、run、apply、also函数
简述相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。函数定义 函数名 实现 let fun T.le.原创 2021-03-15 08:19:02 · 388 阅读 · 0 评论 -
Kotlin lambda表达式
Kotlin lambda表达式这篇文章一起来聊下 Kotlin 中的 lambda 表达式。lambda 表达式大家应该都不陌生,这是在 Java8 中引入的一个很重要的特性。将开发者从原来繁琐的语法中解放出来,可是很遗憾的是只有Java8 及以上版本才能使用。而 Kotlin 则弥补了这一问题,Kotlin 中的 lambda 表达式与 Java 混合编程可以支持 Java8以下的版本。那我们带着以下几个问题一起来看下 Kotlin 中 lambda 表达式。1. 为什么要使用Kotlin的la原创 2021-03-01 23:17:54 · 730 阅读 · 0 评论 -
Kotlin 对象表达式和伴生对象
Kotlin 对象表达式和伴生对象本篇文章将是 Kotlin 面向对象系列的最后一篇文章,这篇文章将会介绍几个特殊的对象语法,这是 Kotlin 语法中独有的。比如对象表达式 (object),天生的单例对象它会使写一个单例模式变得特别简单,而不是像 Java 那样声明一些语法模板。此外伴生对象 (companion object) 它将替代 Java 中的 static 静态成员。1. 为什么需要对象表达式1.1 对象表达式天生单例,会使得单例模式更简单相信很多小伙伴都手写过 Java 中原创 2021-03-01 00:15:05 · 352 阅读 · 0 评论 -
Kotlin中的操作符函数
Kotlin 中的操作符函数这节课我们来聊聊 Kotlin 这门语言对函数式编程的支持。我们都知道在 Kotlin 这门语言中函数荣升成为了一等公民,所以在支持函数式编程的方面,Kotlin 也是非常给力的,并且在 Kotlin 中语法也尽量推荐接近函数式编程的风格。学过以及了解过函数式编程的小伙伴都知道函数式编程最吸引人的地方,莫过于它拥有丰富的函数式操作符,可以使用一种全新的编程方式去操作集合数据。其中操作符最流行莫过于函数式中“三板斧”(过滤filter、映射map、折叠foldLeft/化约原创 2021-02-28 23:41:09 · 1418 阅读 · 0 评论 -
Kotlin系统类型
Kotlin类型系统这篇文章一起来看下 Kotlin 中类型系统,其中涉及到一个很重要的概念就是大家常说的可空性以及为什么Kotlin 相比 Java 在一定程度上能降低空指针异常。此外在 Kotlin 中完全采用和 Java 不同思路来定义它的类型系统。也正因为这样类型系统天然具有让 Kotlin 在空指针异常出现的频率明显低于 Java出现的频率的优势。此外 Kotlin 考虑使用和 Java 完全不同类型系统,以及它是如何去做到极大兼容和互操作。1. 梳理概念在学习 Kotlin 类型系.原创 2021-02-28 23:11:04 · 354 阅读 · 0 评论 -
Kotlin扩展函数
Kotlin 扩展函数1. 为什么需要扩展函数?我们都知道 Koltin 这门语言与 Java 有非常好的互操作性,并且扩展函数这个新特性可以很平滑与现有Java 代码集成。甚至纯 Kotlin 的项目都可以基于 Java 库或者 Android 中的一些第三方框架库来构建,所以扩展函数非常适合 Kotlin 和 Java 语言混合开发模式。在很多公司一些比较稳定良好的库都是 Java 开发的,也完全没必要去用 Kotlin 语言重写。但是想要扩展库的接口和功能,这时候扩展函数可能就会派上用场。使用原创 2021-02-27 23:51:16 · 2963 阅读 · 0 评论 -
Kotlin数据类、密封类、内部类和嵌套类
Kotlin 数据类、密封类、内部类和嵌套类Kotlin 几个比较特殊的类,其中数据类 (data class) 和密封类 (sealed class) 是 Java 中不存在的,所以下面会一一介绍它们如何使用、使用场景、它们解决了哪些问题以及语法糖背后的原理。此外在 Kotlin 中存在嵌套类和内部类,需要注意的是 Kotlin 的嵌套类不是内部类,这点和 Java 是不一样的,所以内部嵌套类不能访问外部类实例。在 Kotlin 中内部类声明需要单独使用inner关键字声明1. 内部类和嵌..原创 2021-02-26 00:32:05 · 901 阅读 · 0 评论 -
Kotlin抽象与接口
Kotlin 抽象与接口其实在 Kotlin 中继承、接口大部分和 Java 是一样的,但是在语法层面支持是不一样。因为 Kotlin 会有一层语法糖可以很方便高效地声明某个语法,从而让你把更多精力专注在业务逻辑上,而不是语法代码模板上。然后我们还会一起来聊下 Kotlin 多继承的实现,Kotlin 和 Java 一样都是单继承,这一点是毋庸置疑的,但是我们也会需要多继承场景,那么 Kotlin 是怎么解决这样场景的呢?大家肯定想到的是接口多继承,具体怎么一起来看看吧。1. 抽象与接口与 Ja原创 2021-02-25 22:59:42 · 222 阅读 · 0 评论 -
Kotlin类和对象
Kotlin 类和对象从这篇文章开始我们一起正式进入 Kotlin 面向对象的世界,Kotlin 实际上也是一门面向对象的语言但同时又兼顾了函数式编程语言。只不过函数在 Kotlin 中的地位被提升至一等公民。但是在 Kotlin 中也是有类、对象、属性、方法等。1. Kotlin 中的类在 Kotlin 中类和 Java 中概念基本是一致的,都是使用class关键字来声明一个类,一个类中可以用属性表示一个类的状态,可以用方法来表示一个类的行为。但是与 Java 不同的是 Kotlin 中的..原创 2021-02-25 22:41:38 · 328 阅读 · 0 评论 -
Kotlin中的集合
Kotlin 中的集合今天一起来探索下 Kotlin 中的集合,集合可以说是编程语言中最为常用以及核心语法点之一。集合一般用于结构化数据存储,我们都很熟悉 Java 中的集合。其实 Kotlin 中的集合与 Java 中的集合还是有一些不同的。最大不同点在于在 Kotlin 中集合是严格分类,分为只读和可变类似于 Kotlin 中的变量的只读和可变,然后针对不同的场景来选择使用只读集合或可变集合。所以下面会展开详细介绍 Kotlin 中的集合。1. 集合的分类在 Kotlin 中集合主要分为可变原创 2021-02-25 22:20:40 · 1397 阅读 · 0 评论 -
Kotlin中的typealias别名
Kotlin 中的 typealias 别名今天一起来研究一下 Kotlin 中一个特殊的语法 typealias (别名),关于 typealias 类型别名,可能有的 Kotlin 开发人员接触到过,有的还没有碰到过。接触过的,可能也用得不多,不知道如何更好地使用它。本篇文章会阐述了什么是类型别名、类型别名的使用场景、类型别名的实质原理、类型别名和 import as 对比以及类型别名中需要注意的坑。看完这篇文章,仿佛打开 kotlin 中的又一个新世界,你将会很神奇发现一个小小 typealias原创 2021-02-25 08:11:36 · 2057 阅读 · 0 评论 -
Kotlin中的序列(Sequences)
Kotlin 中的序列(Sequences)序列(Sequences)实际上是对应 Java8 中的 Stream 的翻版。从之前文章可以了解到 Kotlin 定义了很多操作集合的 API,没错这些函数照样适用于序列(Sequences),而且序列操作在性能方面优于集合操作。而且通过之前函数式 API 的源码中可以看出它们会创建很多中间集合,每个操作符都会开辟内存来存储中间数据集,然而这些在序列中就不需要。1. 为什么需要 Sequences我们一般在 Kotlin 中处理数据集都是集合,以及使原创 2021-02-25 07:38:59 · 1147 阅读 · 0 评论 -
Kotlin中的预置注解
Kotlin 中的预置注解在 Kotlin 中最大的一个特点就是可以和 Java 做到极高的互操作性,我们知道 Kotlin 的语法和 Java 语法还是有很大的不同,要想做到与 Java 做到很大兼容性可能需要携带一些额外信息,供编译器或者运行时做类似兼容转换。其中注解就起到了很大的作用,在 Kotlin 内置很多个注解为了解决 Java 中的调用 Kotlin API 的一些调用习惯和控制 API 的调用。它们就是 Kotlin 中的 @Jvm 系列的注解,咱们一一来看下它们都有哪些。1. @J原创 2021-02-23 23:49:45 · 1112 阅读 · 0 评论 -
Kotlin的注解
Kotlin 中的注解是 100% 与 Java 注解兼容的,有很多相同的地方,但是也有一些不同的地方1. 注解的本质注解实际上就是一种代码标签,它作用的对象是代码。它可以给特定的注解代码标注一些额外的信息。然而这些信息可以选择不同保留时期,比如源码期、编译期、运行期。然后在不同时期,可以通过某种方式获取标签的信息来处理实际的代码逻辑,这种方式常常就是我们所说的反射。2. 注解的定义在 Kotlin 中注解核心概念和 Java 一样,注解就是为了给代码提供元数据。并且注解是不直接影响代码的执原创 2021-02-23 22:56:30 · 1507 阅读 · 0 评论 -
Kotlin学习:Kotlin泛型
Kotlin 泛型泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上。与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼。声明一个泛型类:class Box<T>(t: T) { var value = t}创建类的实例时我们需要指定类型参数val box: Box<Int> = Box<Int>(1)// 或者val box = Box(1) // 编译器会进行类型推断,1 类型原创 2021-02-21 23:45:18 · 1172 阅读 · 0 评论 -
Kotlin学习:Kotlin委托
kotlin 委托委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。Kotlin 直接支持委托模式,更加优雅,简洁。Kotlin 通过关键字 by 实现委托类委托类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。以下实例中派生类 Derived 继承了接口 Base 所有方法,并且委托一个传入的 Base 类的对象来执行这些方法// 创建接口interface Base {转载 2021-02-19 23:55:01 · 273 阅读 · 1 评论 -
Kotlin学习:Kotlin对象表达式和对象声明
Kotlin 对象表达式和对象声明Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类对象表达式通过对象表达式实现一个匿名内部类的对象用于方法的参数中window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { // ... } override fun mouseEnte原创 2021-02-12 23:55:20 · 240 阅读 · 1 评论 -
Kotlin学习:Kotlin枚举类
Kotlin 枚举类枚举类最基本的用法是实现一个类型安全的枚举。枚举常量用逗号分隔,每个枚举常量都是一个对象enum class Color{ RED,BLACK,BLUE,GREEN,WHITE}枚举初始化每一个枚举都是枚举类的实例,它们可以被初始化enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF)}默认名称为枚举字符名,值从0开始原创 2021-02-11 01:21:48 · 994 阅读 · 3 评论 -
Kotlin学习:Kotlin数据类与密封类
Kotlin 数据类与密封类数据类Kotlin 可以创建一个只包含数据的类,关键字为datadata class User(val name: String, val age: Int)编译器会自动的从主构造函数中根据所有声明的属性提取以下函数:equals()/hashCode() toString()格式如"User(name=John, age=42)" componentN() functions对应于属性,按声明顺序排列 copy()函数如果这些函数在类...原创 2021-02-09 23:59:44 · 266 阅读 · 0 评论 -
Kotlin学习:Kotlin扩展
Kotlin 扩展Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。扩展函数扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式fun receiverType.functionName(params){ body}receiverType:表示函数的接收者,也就是函数扩展的对象 functionName:扩展函数的名称 params:扩展函数的参数原创 2021-02-09 00:05:40 · 394 阅读 · 0 评论 -
Kotlin学习:Kotlin接口
Kotlin 接口Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现interface MyInterface { fun bar() // 未实现 fun foo() { //已实现 // 可选的方法体 println("foo") }}实现接口一个类或者对象可以实现一个或多个接口class Child : MyInterface { override fun ba原创 2021-02-07 23:28:49 · 439 阅读 · 1 评论 -
Kotlin学习:Kotlin继承
Kotlin 继承Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类class Example // 从 Any 隐式继承Any 默认提供了三个函数equals()hashCode()toString()注意:Any 不是 java.lang.Object。如果一个类要被继承,可以使用 open 关键字进行修饰open class Base(p: Int) // 定义基类class Derived(原创 2021-02-07 23:22:26 · 297 阅读 · 2 评论 -
Kotlin学习:Kotlin类和对象
Kotlin 类和对象类定义Kotlin 类可以包含:构造函数和初始化代码块、函数、属性、内部类、对象声明Kotlin 中使用关键字class声明类,后面紧跟类名class Runoob { // 类名为 Runoob // 大括号内是类体构成}也可以定义一个空类class Empty可以在类中定义成员函数class Runoob() { fun foo() { print("Foo") } // 成员函数}类的属性属性定义类的属性..原创 2021-02-05 00:08:18 · 270 阅读 · 0 评论 -
Kotlin学习:Kotlin循环控制
Kotlin 循环控制for 循环for 循环可以对任何提供迭代器(iterator)的对象进行遍历,语法如下for (item in collection) print(item)循环体可以是一个代码块for (item: Int in ints) { // ……}如上所述,for 可以循环遍历任何提供了迭代器的对象。如果你想要通过索引遍历一个数组或者一个 list,你可以这么做for (i in array.indices) { print(arr原创 2021-02-03 00:20:54 · 455 阅读 · 0 评论 -
Kotlin学习:Kotlin条件控制
Kotlin 条件控制if 表达式一个 if 语句包含一个布尔表达式和一条或多条语句// 传统用法var max = a if (a < b) max = b// 使用 else var max: Intif (a > b) { max = a} else { max = b} // 作为表达式val max = if (a > b) a else b我们也可以把 IF 表达式的结果赋值给一个变量val max = if (a原创 2021-01-31 17:02:06 · 319 阅读 · 0 评论 -
Kotlin学习:Kotlin基本数据类型
Kotlin 基本数据类型Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型类型 位宽度 Double 64 Float 32 Long 64 Int 32 Short 16 Byte 8 字面常量下面是所有类型的字面常量:十进制:123 长整型以大写的 L 结尾:123L 16 进制以 0x 开头:0原创 2021-01-31 14:08:06 · 454 阅读 · 0 评论 -
Kotlin学习:基础语法 基本数据类型 条件控制 循环控制
KotlinKotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行Kotlin 程序文件以 .kt为什么选择 Kotlin?简洁: 大大减少样板代码的数量。 安全: 避免空指针异常等整个类的错误。 互操作性: 充分利用 JVM、Android 和浏览器的现有库。 工具友好: 可用任何 Java IDE 或者使用命令行构建。Kotlin 基础语法默认导入有多个包原创 2021-01-27 23:21:15 · 303 阅读 · 0 评论 -
Kotlin学习:Kotlin基础语法
Kotlin 基础语法包声明代码文件的开头一般为包的声明package com.runoob.mainimport java.util.*fun test() {}class Runoob {}kotlin源文件不需要相匹配的目录和包,源文件可以放在任何文件目录。以上例中 test() 的全名是 com.runoob.main.test、Runoob 的全名是 com.runoob.main.Runoob如果没有指定包,默认为default包默认导入有多个包会..原创 2021-01-28 22:50:44 · 261 阅读 · 0 评论