Kotlin系列教程
Kotlin自从2017 Google I/O之后成为了官方指定开发语言,作为Android开发者学习Kotlin语言很有必要
xlh1191860939
一个android小菜鸟
展开
-
Kotlin学习系列之:协变和逆变
协变和逆变并不是Kotlin独有的概念,像Java、C#都有这样的概念,对于Java中协变和逆变的理解可参考笔者的另一篇文章。对于Java中协变和逆变的表示,可以通过这样一条PECS规则来概括:Producer Extends, Consumer Super.即仅仅是从该结构中读取数据,该结构就类似于一个生产者(Producer),此时使用"? extends Type";若仅仅是往该结构中放入数据,该结构就类似于一个消费者(Consumer),此时使用"? super Type"。此篇主要来介绍Kotli原创 2020-07-21 10:31:31 · 1087 阅读 · 0 评论 -
Kotlin学习系列之:inline、noinline和crossinline
inline:我们在之前已经对其做了专题描述,具体可参阅Kotlin学习系列之:inline noinline. 当我们的内联函数中有多个lambda参数时,如果我们想要其中某一个lambda参数不进行内联,则可以使用noinline关键字。 fun main() { myMethod(former = { println("former") }...原创 2020-03-31 18:12:26 · 2250 阅读 · 1 评论 -
Kotlin学习系列之:协程上下文与分发器
我们在协程的第一篇就已经提过,协程的运行是依赖于线程的。那么协程与线程之间的关系到底是怎样的呢?协程上下文(Coroutine Context):多种元素的集合,包括Job、分发器等。协程总是会在某个上下文中执行的,这个上下文是由CoroutineContext类型的一个实例来决定的。协程分发器(Dispatcher):决定协程运行在哪个线程或者线程池上,对应的类就是Coroutine...原创 2020-03-22 00:28:45 · 888 阅读 · 0 评论 -
Kotlin学习系列之:使用async和await实现协程高效并发
引例:private suspend fun intValue1(): Int { delay(1000) return 1}private suspend fun intValue2(): Int { delay(2000) return 2}fun main() = runBlocking { val elapsedTime = me...原创 2020-03-20 00:33:36 · 19098 阅读 · 0 评论 -
Kotlin学习系列之:协程的取消和超时
通过前面的三篇文章,我们已经讨论了协程的创建。有的时候,我们在启动了一个协程之后,并不需要该协程执行完毕,这个时候我们可以取消该协程的执行。比如在Android开发中,我们打开了一个页面,我们在进入页面的时候启动了一个协程来发起了网络请求,但是用户立马就关闭了页面,这个时候我们就可以取消这个协程的执行,因为我们已经不需要它的执行结果了。我们先来回顾一下CoroutineSc...原创 2020-03-19 16:30:58 · 7596 阅读 · 0 评论 -
Kotlin学习系列之:协程的创建(三)
经过前面两篇的学习,我们现在可以来总结一下,我们可以有哪些方式来启动一个协程:GlobalScope.launch{} runBlocking{} 接下来我们介绍另外的两种方式,我们先直接来看代码:fun main() = runBlocking {// GlobalScope.launch {// delay(1000)// print...原创 2020-03-16 20:35:27 · 1281 阅读 · 2 评论 -
Kotlin学习系列之:委托(Delegate)
1. 引入:委托作为一种传统的设计模式,在Java中要想实现这种设计模式,就需要自己进行类的结构设计来实现。而在Kotlin中,提供语言层面上的支持,我们可以通过by关键字很轻松就能实现。2. 类委托(class delegate) 自己动手实现委托: interface ServerApi { fun login(username: String, password: S...原创 2019-08-15 16:28:10 · 2878 阅读 · 0 评论 -
Kotlin学习系列之:运算符重载(operator overloading)
1.引入:运算符重载,最初接触到这个概念是在C++里,Java中是没有的,取而代之的是通过特定接口来实现,比如进行排序比较大小时,我们可以实现Comparable接口。而Kotlin中,又重新支持该特性,因为这样会显得更加直观。2.如何实现运算符重载: 方式一:在类内定义,以成员方法(member)的形式 比如,我们定义一个Point类: data class Point(va...原创 2019-08-08 21:09:10 · 1774 阅读 · 0 评论 -
Kotlin学习系列之:协程的创建(二)
在系列一中,我们已经对协程有了初步的了解,我们在此篇继续。前面我们是通过GlobalScope.launch{}这个协程建造器来创建协程的,它的特点就是: Launches a new coroutine without blocking the current thread. 即不会阻塞当前的线程的运行。我们再来接触一个不一样的协程建造器: runBlocking{} ...原创 2019-08-01 16:57:13 · 378 阅读 · 0 评论 -
Kotlin学习系列之:协程的创建(一)
1.协程:Coroutine2.如何去理解协程: 可以视为轻量级的线程 我们可以回顾一下什么是线程。从操作系统原理的角度来讲,进程是资源分配的基本单位,而线程是调度的基本单位,也就是说线程实际上是系统级别的,它运行与否是由操作系统决定的。从Java语言层面上讲,我们可以通过new Thread().start这种形式去启动一个线程,我们可以查看Thread类的源代码: publi...原创 2019-07-20 23:32:33 · 708 阅读 · 0 评论 -
Kotlin学习系列之:inline
inline: Kotlin中的一个关键字,用来修饰function,那么这个function就被称作inline function(内联函数)。最初接触内联函数这个概念还是当初在学校学习C语言时候提到的,Java中是没有这一概念的,如今Kotlin又引入这一特性。那么inline function有什么优势或者说特点呢? 特点:当你调用一个inline function的时候,编译...原创 2019-02-01 10:30:11 · 5555 阅读 · 0 评论 -
Kotlin学习系列之:相等性比较(Equality)
今天被同事问到了三个等于号啥意思,有点懵,去年学习的时候没怎么太注意,所以翻了翻文档,特此记录一下:感觉文档上的概括很好,并且对于我如果回答==和equals的区别,感觉上面这种分类概括性很强:引用相等和结构相等。对于Object类中,equals方法的默认实现就是引用相等比较,如果要想某个类实现结构相等性比较,就必须重写equals方法,这是在Java中。在Kotlin中呢,原理是...原创 2018-12-07 17:28:57 · 1036 阅读 · 0 评论 -
Kotlin学习系列之:可变参数
Kotlin中的可变参数 回顾一下Java中的可变参数的使用: public class VarArgsTest { public static void main(String[] args) { Test test = new Test(); // 调用方式一 System.out.println(test.sum(1, ...原创 2018-08-27 10:56:35 · 4916 阅读 · 0 评论 -
Kotlin学习系列之:对比Any和Object
Any中定义的方法有:toString()、equals()、hashCode() 3个Object类中定义的方法有:toString()、equals()、hashCode()、getClass()、clone()、finalize()、notify()、notifyAll()、wait()、wait(long)、wait(long,int) 11个联系:Kotlin编译器将kotlin.A...原创 2017-08-25 15:05:47 · 8400 阅读 · 0 评论 -
Kotlin学习系列之:Kotlin的构造函数
Kotlin的构造函数分为主构造器(primary constructor)和次级构造器(secondary constructor)。下面我们来看看他们的写法。一、 Primary Constructor1. 写法一:class 类名 constructor(形参1, 形参2, 形参3){}eg: class Person constructor(username: ...原创 2018-03-01 15:09:18 · 68097 阅读 · 9 评论 -
Kotlin学习系列之:object关键字的使用场景
object是Kotlin中的一个重要的关键字,也是Java中没有的。object主要有以下三种使用场景:对象声明(Object Declaration) 伴生对象(Companion Object) 对象表达式(Object Expression)下面就一一介绍它们所表示的含义、用法以及注意点,保证你在看完本篇之后就可以完全掌握object关键字的用法。1.对象声明(Obje...原创 2018-03-13 20:40:15 · 45416 阅读 · 11 评论 -
Kotlin学习系列之:扩展(Extension)
当想要扩展一个既有类的功能时,在Java中你能想到的方法:直接修改类的源代码进行功能扩充(当然前提是你可以修改源码,如果该类是别人写的或者说是库和框架提供的,这种方式直接就凉凉)继承,在子类中添加相关方法使用装饰模式,动态扩展对象的功能除了上面说的三种方式外,在Kotlin中还提供一种新的方式:扩展(Extension)。一、扩展函数(Extension Functions)1. 语法形式:fun...原创 2018-03-20 14:43:45 · 3088 阅读 · 0 评论 -
Kotlin学习系列之:数据类(data class)和密封类(sealed class)
一、数据类(data class) 在介绍数据类之前,我们先来看看这样一段代码:class Student(val name: String, var age: Int)fun main(args: Array<String>) { val student = Student("David", 12) println(student)}此时会...原创 2018-03-22 10:43:05 · 3794 阅读 · 0 评论 -
Kotlin学习系列之:理解Backing Field
对于Backing Field这个概念,在Java中是没有的,是Kotlin中新引入的概念。我们先来看看它在什么情况下使用:class Person { var username: String = "hello" get() { println("getter invoked...") return field } set(...原创 2018-08-23 16:20:25 · 1046 阅读 · 0 评论