
Kotlin
文章平均质量分 93
苏火火丶
Adnroid | 江南皮革厂
展开
-
大型Android项目架构:基于组件化+模块化+Kotlin+协程+Flow+Retrofit+Jetpack+MVVM架构实现WanAndroid客户端
前言:苟有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。项目采用 Kotlin 语言,Android Jetpack,组件化,模块化拆分,加入短视频功能,Flow冷流的使...原创 2023-04-20 23:34:40 · 4664 阅读 · 2 评论 -
Kotlin协程:挂起与恢复原理逆向刨析
前言:只有在那崎岖的小路上不畏艰险奋勇攀登的人,才有希望达到光辉的顶点。经过前面两篇协程的学习,我相信大家对协程的使用已经非常熟悉了。本着知其然更要知其之所以然的心态,很想知道它里面是怎么可以让异步代码同步化的?协程它是如何实现线程的调度的?协程的挂起和恢复本质是什么?今天在这里一一为大家解答。整个Kotlin 协程学习分为三部曲,本文是第三篇:Kotlin 协程实战进阶(一、筑基篇)Kotlin 协程实战进阶(二、进阶篇)Kotlin 协程实战进阶(三、原理篇)(本文需要前面两篇文章协程的知识点作为基础)原创 2022-09-15 21:49:32 · 1946 阅读 · 0 评论 -
Kotlin 协程实战进阶(二、进阶篇:协程的取消、异常处理、Channel、Flow)
前言上一篇文章对协程的概念和原理、协程框架的基础使用、挂起函数以及挂起与恢复等做了详细的分析,如果您对协程有一定的理解,可以阅读《Kotlin 协程实战进阶(一、筑基篇)》我们来对协程整体认识来做一个整体的交流。由于篇幅原因还有一部分重要的知识点没有讲解到,接下来继续分析 Kotlin 协程的重要要素和使用,首先来回顾一下上篇文章的整体内容:1、Coroutine:协程的概念和原理:协程是什么以及它的作用和特点,图解分析协程的工作原理。2、Coroutine builders:协程的构建,协程构建器原创 2021-08-05 18:04:19 · 5044 阅读 · 6 评论 -
一文看透 Kotlin 协程本质
前言公司开启新项目了,想着准备亮一手 Kotlin 协程应用到项目中去,之前有对 Kotlin 协程的知识进行一定量的学习,以为自己理解协程了,结果……实在拿不出手!为了更好的加深记忆和理解,更全面系统深入地学习 Kotlin 协程的知识,协程将分为三部分来讲解,本文是第一篇:Kotlin 协程实战进阶(基础篇)Kotlin 协程实战进阶(进阶篇)Kotlin 协程实战进阶(高级篇)本文大纲 一、概述协程的概念在1958年就开始出现(比线程还早), 目前很多语言开始原生支, Java原创 2021-07-26 12:32:20 · 6382 阅读 · 0 评论 -
Kotlin专题「二十五」:反射
前言:不要在夕阳西下时幻想,要在旭日东升时努力。一、概述 反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有方法和属性;对于任意一个对象,都能调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制当在 Kotlin 中使用反射时,你可能会使用到两种不同的反射 API。第一种是标准的 **Java 反射**,定义在包 **java.lang.reflect** 中,因为 Kotlin 类会被编译成普通的 Java 字节码,Java 反射 AP原创 2021-02-22 11:59:28 · 2199 阅读 · 11 评论 -
Kotlin专题「二十四」:注解
前言:知人者智,自知者明;胜人者力,自胜者强。 ——《道德经》一、概述Java 中的泛型 在 Java 中,其实所谓的泛型就是类型的参数化。如果方法有入参,那么这些入参面前往往会有类型,这个类型就是修饰参数所用。假如我们在创建类型的时候,也为其指定了参数,这个参数又是个类型,这种我们就称为泛型。 public void addList(Collection<T> list) {//T表示可传入任何类型表示 //TODO }使用泛型能够像传递参数..原创 2021-01-19 18:59:38 · 950 阅读 · 2 评论 -
Kotlin专题「二十三」:引用详解 :: (类引用、属性引用、函数引用、绑定引用)
前言:没有谁的幸运,凭空而来,只有当你足够努力,你才会足够幸运。这世界不会辜负每一份努力和坚持,时光不会怠慢执着而勇敢的每一个人!一、概述 反射是一组语言和库特性,允许在允许时对自己程序进行自省。Kotlin 使函数和属性成为该语言的一级公民,而内省它们(即在运行时学习属性或函数的名称或类型)与简单地使用函数或响应式风格紧密相连。在 JavaScript 平台上,目前只支持类引用。更多信息请了解 Kotlin/JS 的反射。JVM 依赖在 JVM 平台上,使用反射特性所需要的运行组件在 K..原创 2021-01-13 14:19:11 · 3966 阅读 · 0 评论 -
Kotlin专题「二十二」:Lambdas和高阶函数详解
前言:成功的信念在人脑中的作用就如闹钟,会在你需要时将你唤醒。一、概述 今天我们来聊下 lambda 表达式。lambda 表达式应该都不陌生,在 Java8 中引入一个很重要的特性,将开发者从原来繁琐的语法中解放出来,但是局限于只有 Java8 版本才能使用。而 Kotlin 弥补了这一问题,Kotlin 中的 lambda 表达式与 Java 混合编程可以支持 Java8 版本一下的版本。### 为什么使用 Kotlin 的 Lambda 表达式针对 Kotlin 中使用 lam原创 2020-12-09 19:18:30 · 821 阅读 · 0 评论 -
Kotlin专题「二十一」:委托和委托属性详解
前言:遇到困难时不要抱怨,既然改变不了过去,那么就努力改变未来。一、概述 有一些常见的属性类型,尽管我们可以在每次需要时手动实现它们,但最好是一次性实现放入库中。比如:延迟属性:值只在第一次访问时计算;观察属性:监听器会得到这个属性变化的通知;在映射中存储属性,而不是为每个属性存储单独的字段。为了涵盖这些情况,Kotlin 支持委托属性:class School { var str: String by Delegate()}语法是val/var <proper..原创 2020-11-25 15:44:11 · 1295 阅读 · 1 评论 -
Kotlin专题「二十」:内联类(Inline classes)
前言:生活不是等暴风雨过去,而是学会在风雨中跳舞。一、概述有时候,业务逻辑需要围绕某种类型创建包装器。但是,由于额外的堆分配,它引入了运行时开销。此外,如果被包装的类型是原语类型,性能损失会很严重,因为原语类型通常由运行时进行了大量优化,而它们的包装器没有得到任何特殊处理。为了解决这些问题,Kotlin 引入了一种特殊的类,叫做内联类,它是通过在类名前放置一个 Inline 修饰符来声明的:inline class Password(val value: String)内联类必须在主构造函..原创 2020-10-23 17:27:09 · 1997 阅读 · 0 评论 -
Kotlin专题「十九」:类型别名(type alias)
前言:越努力,越幸运,若是不幸运,就一定是不够努力。一、概述 类型别名为现有类型提供了替代名称。如果类型名称太长,可以引入一个不同的较短名称并使用新的名称。interface RestaurantPatron { fun makeReservation(restaurant: Organization<(String, Int?) -> String>) fun visit(restaurant: Organization<(String, Int?) -> String>原创 2020-10-21 17:00:17 · 2305 阅读 · 1 评论 -
Kotlin专题「十八」:object(对象表达式和对象声明)
前言:现实会告诉你,不努力就会被生活踩死,无需找什么借口,一无所有就是拼的理由。一、概述 有时候我们需要创建一个对某些类稍加修改的对象,而不必显式地成为它声明一个新的子类。Kotlin 用对象表达式和对象声明来处理这种情况。使用 object 关键字能实现类似 Java 中的匿名内部类功能。Kotlin 提供 object 关键字的用意就是,在生成在一个对当前类进行轻微修改的类对象,且不需要声明一个新的子类的时候使用。下面将从 object 作为表达式和作为声明两部分阐述一下 object 的..原创 2020-10-14 18:33:53 · 1736 阅读 · 0 评论 -
Kotlin专题「十七」:枚举类(enum class)
前言:前行的路,不怕万人阻挡,只怕自己投降,人生的帆,不怕狂风巨浪,只怕自己没胆量。一、概述枚举类最基本的用法是实现类型安全的。枚举类使用 enum 关键字修饰: enum class Direction {//使用 enum 关键字修饰,在类头 class 前 NORTH, SOUTH, WEST, EAST }每一个枚举常数都是一个对象,枚举常量用逗号分隔。 fun test() { Direction.NORTH Directi..原创 2020-10-13 11:56:02 · 2908 阅读 · 0 评论 -
Kotlin专题「十六」:嵌套和内部类
前言:努力想要得到什么东西,其实只要沉着冷静、实事求是,就可以轻易地、神不知鬼不觉地达到目的。而如果过于使劲,闹得太凶,太幼稚,太没有经验,就哭啊,抓啊,拉啊,像一个小孩扯桌布,结果却是一无所获。只不过把桌子上的好东西都扯在地上,永远也得不到了。一、嵌套类类可以嵌套在其他类: class Outer { private val number: Int = 1 class Nested { fun foo() = 2 ..原创 2020-09-29 15:53:50 · 347 阅读 · 2 评论 -
Kotlin专题「十五」:泛型
前言:彪悍的人生,不需要解释,只要你按时达到目的地,很少有人在乎你开的是奔驰还是拖拉机。一、概述 在 Java 中,其实所谓的泛型就是类型的参数化。如果方法有入参,那么这些入参面前往往会有类型,这个类型就是修饰参数所用。假如我们在创建类型的时候,也为其指定了参数,这个参数又是个类型,这种我们就称为泛型。本篇中会涉及到 Java 的泛型以及PECS法则,有不了解的先看看[<font color="2E98F5">Java 中的泛型以及PECS法则(协变和逆变)](https原创 2020-09-09 15:31:52 · 509 阅读 · 0 评论 -
Kotlin专题「十四」:密封类(Sealed Classes)
前言:每一个你不满意的将来,都有一个你没有努力的曾经。一、概述 密封类用于表示受限制的类层次结构,类中的值可以拥有受限集合中的一种类型,但不能拥有任何其他类型时。从某种意义上看,他们是枚举类的拓展:枚举类型的值集合也受到限制,但每个枚举常量仅作为单个实例存在,而一个密封类的子类可以有多个可以包含状态的实例。通俗点来说,密封类是包含了一组受限的类集合,因为里面的类都是继承自这个密封类的。但是它和其他继承类(open)的区别在于密封类可以不被此文件外被继承,能有效保护代码。但是密封类的子类的扩..原创 2020-08-21 19:24:40 · 2853 阅读 · 0 评论 -
Kotlin专题「十三」:数据类(Data Classes)
前言:过程会苦,但结果怡人。一、概述 我们经常创建主要用于保存数据的类。在这样的类中,一些标准的功能和实用函数通常是机械地从数据推导出来的。在 Kotiln 中,这被称为一个数据类,并使用 data 修饰。...原创 2020-08-19 19:27:32 · 4557 阅读 · 0 评论 -
Kotlin专题「十二」:扩展Extensions(扩展函数与属性)
前言:别让欲望泯灭了希望。一、概述 Kotlin 提供了拓展具有新功能的类的能力,而不必从类继承或使用设计模式(如Decorator),这是通过称为拓展的特殊声明来实现的。例如,你可以从无法修改的第三方库位类编写新函数。这些函可以按照通常的方式调用,就像它们是原始类的方法一样。这种机制称为拓展函数。还有一些拓展属性允许你为现有类定义新属性。简单点来说,当你想在某个类加新功能时,为了避免在原来的类做修改,可以在别的类中为该类设计新代码。拓展是一种静态行为,对被拓展的类代码本身不会造成任何影响。..原创 2020-08-17 19:07:42 · 1447 阅读 · 0 评论 -
Kotlin专题「十一」:可见性修饰符(private、protected、internal、public)
前言:不要假装很努力,因为结果不会陪你演戏。一、概述 类,对象,接口,构造函数,函数,属性及其setter可以具有可见性修饰符(getter始终具有与属性相同的可见性)。在 Kotlin 中有四个可见性修饰符:private,protected,internal和public。默认可见性是public(在没有显式修饰符时)。下面将会给大家讲解修饰符如何在应用声明作用域的不同类型。这里先来介绍一下类的几种修饰符,它包含 classModifier 和 accessModifier:1.1 c..原创 2020-08-14 17:21:25 · 4573 阅读 · 0 评论 -
Kotlin专题「十」:接口与函数接口(Functional (SAM) interfaces)
前言:不要当父母需要你的时候,除了泪水,一无所有;不要当孩子需要你的时候,除了惭愧一无所有;不要当自己回首过去的时候,除了蹉跎一无所有。一、概述 Kotlin 中的接口可以包含抽象方法的声明,也可以包含方法实现。接口与抽象类的区别在于接口不能存储状态。它们可以具有属性,但是这些属性必须是抽象的或者提供访问器实现。Kotlin 中接口与 Java8 类似,使用 `interface` 关键字定义接口,允许方法有默认实现:```kotlin interface M原创 2020-08-13 17:38:03 · 1729 阅读 · 0 评论 -
Kotlin专题「九」:包与导入(Packages and Imports)
前言:一剪薄弱的光,也要骄傲地捧出辉煌。一、概述 Kotlin 中的导包也是一门学问,刚从 Java 转 Kotlin 的时候经常导错包或者不知道怎么导适合的包,这里来为大家讲解下 Kotlin 的导包规则。(另外,Kotlin专题的文章会持续更新下去,目前只是更新了一小部分,后面就抓紧时间将剩下的奉上给大家。学习的越深入越会被 Kotlin 简洁的代码以及良好的代码阅读性深深的被折服,当然在学习过程会难免会枯燥乏味,也会遇到困难,这也是提现了每个人的毅力与意志,对知识的渴望,一起共勉!)二、..原创 2020-08-12 18:39:15 · 1500 阅读 · 0 评论 -
Kotlin专题「八」:属性与字段(Getter()与Setter(),后备字段field)
前言:人生只有走出来的美丽,没有等出来的辉煌。一、概述 前面已经为大家讲解了类的使用以及属性的相关知识,在一个类中基本上都会出现属性和字段的,属性在变量和常量的文章中有详细讲解到,这里会重新简单介绍到。1.1 属性的定义类中基本上都会存在属性,使用`var`和`val`修饰,`var`声明为可变,即可读可写;`val`声明为不可变,即只能读不能改。类中的属性必须初始化值,否则会报错。...原创 2020-08-07 18:37:35 · 5306 阅读 · 2 评论 -
Kotlin专题「七」:类和继承
前言:不是所有的坚持都有结果,但是总有一些坚持,能从一寸冰封的土地里,培养出十万朵怒放的玫瑰。一、概述 任何一种面向对象的编程语言里面,类class是非常基础也是非常重要的,万物皆对象,对象就是我们所说的类,Kotlin 也不例外。二、类的声明Kotlin 类可以包含构造函数、初始化代码块、函数、属性、内部类、对象声明等,使用关键字 class 声明类,后面紧跟类名: class A { //属性 //TODO //函..原创 2020-07-31 18:56:52 · 599 阅读 · 1 评论 -
Kotlin专题「六」:函数的声明和使用
前言:生命不息,奋斗不止,只要相信,只要坚持。一、概述 对于 Kotlin 中的函数来说,和 JavaScript 语言很像,对于 Java 来说它不是闭包的,这里主要讲函数的基本使用,包括函数的定义,参数,返回值等。同时介绍函数参数使用默认值和单表达式函数的使用。二、函数的声明及使用2.1 函数的声明Kotlin中函数的声明关键字为`fun`,定义的各式为:...原创 2020-07-29 16:04:39 · 1195 阅读 · 0 评论 -
Kotlin专题「五」:可空类型?,空安全?.,空值合并?:,非空断言!!,类型安全转换as?
前言:不走心的努力,都是敷衍你自己。你要坚信现在所有过不去的坎,将来总有一天会当笑话说出来。一、概述 Java 中定义一个变量可以默认不赋值,因为系统默认会赋值一个默认值,并且可以定义一个为 null 的变量,这样在使用的时候就需要判断该变量是否为 null 。从代码的简洁性以及代码的可读性来说,Kotlin 能更好处理,那么 Kotlin 定义一个可为 null 的变量怎么定义呢?下面针对 Kotlin 这一特性来详细讲解。二、可空类型三、空安全四、非空断言...原创 2020-07-24 12:30:41 · 3037 阅读 · 0 评论 -
Kotlin专题「四」:逻辑控制语句(if、for、when、while、return、break、continue)
前言: 有些路看起来很近,可是走下去却很远,缺少耐心的人永远走不到尽头。人生,一半是现实,一般是梦想。一、概述 前面几篇文章中讲解了 Kotlin 的常量、变量、数据类型和作用域函数等,与 Java 相比还是有一定的区别。这里给大家介绍 Kotlin 的相关逻辑控制语句,如:if,for,when,while等。Kotlin 中没有 Java 中的三元运算符,但是用if语句可以实现类似效果;when语句替代了 Java 中的 switch语句;for循环语句废除了 Java 中的(初始值;条件;..原创 2020-07-22 13:15:19 · 2465 阅读 · 0 评论 -
Kotlin专题「三」:数据类型(数值类型,布尔类型,字符类型,字符串类型,数组类型)
前言: 有一种落差是,你配不上自己的野心,也辜负了所受的苦难。一、概述 我们知道,Java 中数据类型分为基本数据类型和对应的包装类型,比如 Java 中的整形 int 和对应的包装类 Integer 。在 Kotlin 中是没有这样区分的,例如对于整型来说只有 Int 这一个类型,Int 是一个类,编译时会根据情况把这个整型 Int 编译成 Java 中的 int 还是 Integer ,那么是根据什么情况来判断的呢?我们先来看看 Kotlin 与 Java 数据类型的对比:Kotl..原创 2020-07-06 19:04:48 · 2014 阅读 · 1 评论 -
Kotlin专题「二」:变量(var与val)、常量、注释
前言: 莫问良人长与短,从此山水不相逢。一、概述 大家都知道 Kotlin 现在被 Gooogle 定为 Android 的官方开发语言。Kotlin 在项目中的使用将会越来越广泛,这也掀起了一波学习 Kotlin 的浪潮,作为一名 Android 开发者 Kotlin 是必须要掌握的。Kotlin 是由 JetBrains 在2010 年推出的基于 JVM 的新编程语言,是一种新的静态类型编程语言。开发者称开发它的目的是避免 Java 语言中的一些难题。Kotlin 基于 JVM 的字节结构..原创 2020-07-03 16:11:21 · 5180 阅读 · 0 评论 -
Kotlin专题「一」:你了解Kotlin的let,with,run,apply,also作用域函数的区别吗?
前言: 成和败要努力尝试,人若有志应该不怕迟。一、概述 Kotlin提供了不少比Java高级的语法,在Kotlin标准库中[(Standard.kt)]提供了一些Kotlin拓展的内置函数,可以优化编码,比如let,with,run,apply,also等。Standard.kt是Kotlin库的一部分,它定义了一些基本函数,功能非常强大。1.1 Kotlin回调函数的优化Kotlin中对Java一些接口的回调做了优化,可以使用lambda函数来替代,可以简化代码和原创 2020-06-09 14:12:52 · 1184 阅读 · 1 评论