Kotlin
xk_一步一步来
一步一步
展开
-
Kotlin学习系列——lateinit 和 by lazy
lateinit 和 lazy 是 Kotlin 中的两种不同的延迟初始化的实现lateinit 只用于变量 var,而 lazy 只用于常量 vallazy 应用于单例模式(if-null-then-init-else-return),而且当且仅当变量被第一次调用的时候,委托方法才会执行。lazy()是接受一个 lambda 并返回一个 Lazy <T> 实例的函数,返回的...转载 2020-01-15 14:17:15 · 439 阅读 · 0 评论 -
Kotlin学习系列——技能小成
一眼望去,立刻知道答案,Kotlin小成整理一下目录1️⃣实现findViewById有几种方式?进阶思考:Kotlin中的findViewById源码分析?2️⃣根据状态改变初始值?进阶思考:mCachedProfileBean未初始化就被访问会发生什么?3️⃣怎么定义public static final 常量?进阶思考①:伴生对象companion object适用范围...转载 2020-01-15 11:46:45 · 524 阅读 · 0 评论 -
Kotlin学习系列——null的处理(NPE)
NullPointerException,俗称NPE,不管菜鸟还是老鸟们,都是不可避免,经常遇到的一个异常,解释起来很简单,就“空指针”三个字。总是在一次不小心,而掉进这个陷阱里。Kotlin 的设计目标就是希望消除代码中 null 引用带来的危险, 也就是所谓的造成十亿美元损失的大错误.NPE的原因尽管Kotlin希望消除代码中的NPE,我们总是不小心,总会不小心又掉进NPE的陷阱,下面是可...转载 2020-01-10 16:24:31 · 620 阅读 · 0 评论 -
Kotlin学习系列——解构声明
解构声明所谓的解构声明就是将一个对象解构(destructure)为多个变量,也就是意味着一个解构声明会一次性创建多个变量.简单的来说,一个解构声明有两个动作:声明了多个变量将对象的属性值赋值给相应的变量比如,有个数据类Person,其有name和age两个属性data class Person(var name: String, var age: Int) {}12当我们对...转载 2020-01-10 15:19:20 · 197 阅读 · 0 评论 -
Kotlin学习系列——智能转换
官方文档: http://kotlinlang.org/docs/reference/typecasts.html1.is和!is操作符(Operators)在运行时,可用is或!is操作符来检查对象类型是否符合要求: if (obj is String) { print(obj.length) } if (obj !is String) { //等价...转载 2020-01-10 14:45:53 · 190 阅读 · 0 评论 -
Kotlin学习系列——回调函数、let、also、run 、with、apply 使用总结(详细)
简述:相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。一、回调函数的K...转载 2020-01-10 10:37:03 · 865 阅读 · 0 评论 -
Kotlin学习系列——一张表记忆let、also、run 、with、apply用法
原创 2020-01-10 11:30:26 · 161 阅读 · 0 评论 -
Kotlin学习系列——回调函数、let、also、run 、with、apply 使用总结(简洁)
kotlin lambda 简化————————kotlin 回调函数、let、also、run 、with、apply 使用总结Lambda 表达式(lambda expression)是一个匿名函数。编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。回调函数内联函数 let内联函数 also内联函数 with...转载 2020-01-10 10:18:38 · 287 阅读 · 0 评论 -
Kotlin学习系列——带接收者的Lambda(with、apply)
今天来看看Kotlin中关于lambda的两个函数with和apply,我们将其称为带接收者的lambda,不了解为什么会这么命令,看完下面的实例你应该就可以理解了。注意,上面也已经说了,with和apply其实是两个函数,虽然它们看起来像是关键字。with函数简单使用我们在Java中经常会写下面这样的代码:public String getRes() { StringBui...转载 2020-01-09 17:08:47 · 455 阅读 · 0 评论 -
Kotlin学习系列——Lambda表达式(3)
今天一起来看看Kotlin中与Lambda相关的成员引用的内容。定义先说说什么是成员引用,这里的引用指的就是变量引用,就相当于Java中的引用概念。成员的概念这里包含了成员变量和成员方法。这都是很官方的的说法。说白了,就是类里面的变量和函数。所以我们这篇文章讨论的就是如果一个成员函数或者变量已经被定义好了,我们如何使用Lambda表达式的语法,将它传递给另一个函数。成员引用语法我们...转载 2020-01-09 17:05:38 · 131 阅读 · 0 评论 -
Kotlin学习系列——Lambda表达式(2)
上一篇文章讲到了最基本的Lambda表达式,今天这篇文章继续讲Lambda表达式中的在作用域中访问变量。Java中的内部类访问变量当我们在函数内部使用匿名内部类时,我们可以在匿名内部类内使用函数的参数和函数内的局部变量。当我们在使用Lambda表达式时,我们也可以访问这个函数的参数和使用那些在Lambda表达式之前定义的变量。下面先看一个在Java中匿名内部类中访问函数参数和局部变量...转载 2020-01-09 17:04:33 · 142 阅读 · 0 评论 -
Kotlin学习系列——Lambda表达式(1)
今天开始后续的几篇Kotlin的文章会介绍Kotlin中Lambda表达式相关的内容。什么是Lambda表达式在Java8中引入了Lambda表达式,这是最令Java开发者激动和期待的一个功能。那究竟什么是Lambda表达式呢?Lambda表达式本质上是可以传递给其他函数的一小段代码,我们在之前的Java或者Kotlin中,一个函数的参数可以是一种简单的基本数据类型变量或一个对象实...转载 2020-01-09 16:57:07 · 165 阅读 · 0 评论 -
Kotlin学习系列——标准函数(with、let、run、apply、also)
kotlin标准函数总结写在最前1.with:println("====================学习with====================")/** * 特点: * 1.传入参数为this,可以直接调用this的属性和函数 * 2.返回值可以是任意类型 * 缺点: * 1.不支持非null校验 * 2.不支持链式调用 */val userInfo = w...转载 2020-01-09 16:37:09 · 374 阅读 · 0 评论 -
Kotlin学习系列——常见高阶函数(map、flatMap、fold、reduce、joinToString、filter、takeWhile)
高阶函数1.map//1.map:将List中每个元素转换成新的元素,并添加到一个新的List中,最后将新List返回arrayOf(1, 2, 3).map { i: Int -> i * 10 }.forEach(::println)/** * 打印输出 * 10 * 20 * 30 */123456782.flatMap//2.flatMap:将数组中全部元素按...转载 2020-01-09 16:20:35 · 464 阅读 · 0 评论 -
Kotlin学习系列——集合的函数式API
几乎各种语言都对集合操作提供了方便的库函数,Kotlin也不例外,今天就来说说Kotlin中与集合操作相关的函数式API。在开始之前先说一下这里的演示数据,后面演示数据的代码将不再重复出现://数字集合val numList = listOf(1, 2, 3, 4, 5, 6)//People数据类data class People(val name: String, val ag...转载 2020-01-09 10:52:11 · 283 阅读 · 0 评论 -
Kotlin学习系列——密封类
今天说说Kotlin中的密封类。在Java中没有密封类这个概念,所以就没法和Java进行对比了,主要看看Kotlin中的密封类的出现目的和使用方法。为什么会出现密封类我们先不说密封类是什么,先看看为什么需要密封类。下面先通过一段代码来看。Kotlin代码interface FatherClassclass SonClass1: FatherClass{}class So...转载 2020-01-09 10:47:57 · 210 阅读 · 0 评论 -
Kotlin学习系列——静态方法(companion object),静态类(object)
阅读:Kotlin学习系列之:object关键字的使用场景:https://blog.csdn.net/xlh1191860939/article/details/79460601Java中修饰静态方法,使用关键字static,例如:public static String getName() { return BuildConfig.VERSION_NAME;}Kotlin语言中使用...转载 2020-01-09 11:50:11 · 456 阅读 · 0 评论 -
Kotlin学习系列——伴生对象(对象声明的一种特殊情况)
上一节中说到了对象声明,这次我们聊聊对象声明的一种特殊情况,对象声明在一个类内部,也就是标题所说的伴生对象。伴生对象最简单直白的理解就是与一个类相伴而生的对象,由于它处于类内部,所以必然和包含它的类存在某种联系。基本用法伴生对象使用关键字companion来声明,看起来就像是在object关键字前面加的一个修饰符。它的一般格式如下:class 外部类名{ companion o...转载 2020-01-09 10:43:53 · 479 阅读 · 0 评论 -
Kotlin学习系列——对象表达式和对象声明
Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类。对象表达式通过对象表达式实现一个匿名内部类的对象用于方法的参数中:window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { // ....转载 2019-12-30 08:48:17 · 147 阅读 · 0 评论 -
Kotlin学习系列——命名参数和默认参数
今天一起来看看Kotlin的命名参数和默认参数。如果你学过Python,那你对这两个概念一定不陌生,那我们今天就来学习一波Kotlin中的默认参数和命名参数。遇到的问题为了说明命名参数和默认参数出现的必要性,我们先抛出一个问题,如何打印出一个集合,并且定制它的打印形式。在Java中我们最常用的思路就是重写toString()方法或者是写一个打印集合的工具类,比如下面的Java代码。...转载 2020-01-09 10:34:26 · 406 阅读 · 0 评论 -
Kotlin学习系列——顶层函数和属性
今天一起来看看Kotlin中的顶层函数和属性。遇到的问题我们都知道,Java中,所有的代码都是依托于类而存在,我们所谓的函数作为类的方法,我们所谓的属性作为类的属性。但是在有些情况下,我们发现有些方法可能不是属于某一个特定类,有些属性也不是属于某一个特定的类。所以我们就创建了很多的Java工具类和属性的常量类,就像下面这样。Java代码public class Constant {...转载 2020-01-09 09:58:27 · 376 阅读 · 0 评论 -
Kotlin学习系列——Lambda表达式完全解析
简述: 今天带来的Kotlin浅谈系列的第六弹, 一起来聊下Kotlin中的lambda表达式。lambda表达式应该都不陌生,在Java8中引入的一个很重要的特性,将开发者从原来繁琐的语法中解放出来,可是很遗憾的是只有Java8版本才能使用。而Kotlin则弥补了这一问题,Kotlin中的lambda表达式与Java混合编程可以支持Java8以下的版本。那我们带着以下几个问题一起来看下Kotli...转载 2020-01-08 17:30:13 · 333 阅读 · 0 评论 -
Kotlin学习系列——函数,Lambda表达式
函数Kotlin中,使用fun关键字定义一个函数,函数参数使用 Pascal 表示法定义,即 name: type。参数用逗号隔开。每个参数必须有显式类型。fun foo(arg1:String,arg2:Boolean,arg3:Int):Int{ //do somethong return 1}1234当函数只有单个表达式时,可以省略花括号,直接写在=之后,如果返回值类...转载 2020-01-08 16:20:21 · 181 阅读 · 0 评论 -
Kotlin学习系列——函数式编程
一、什么是Kotlin?Kotlin是一门新兴的Jvm语言,与Scala等充满野心,想要取代Java的Jvm语言不同,Kotlin更像是Java的扩展,它能很好的和已有的Java代码一起工作,而比起Java,Kotlin提供了许多能够大幅提高开发效率的特性,使用Kotlin能写出比Java表现力更强,且更安全的代码。并且,Kotlin对函数式编程提供了比Java8更好的支持。 就在今年,Go...转载 2020-01-08 17:27:11 · 362 阅读 · 0 评论 -
Kotlin学习系列——数据类
Kotlin 数据类与密封类数据类Kotlin 可以创建一个只包含数据的类,关键字为 data:data class User(val name: String, val age: Int)编译器会自动的从主构造函数中根据所有声明的属性提取以下函数:equals() / hashCode()toString() 格式如 “User(name=John, age=42)”compo...转载 2019-12-28 17:27:11 · 269 阅读 · 0 评论 -
Kotlin系列学习——扩展函数和属性
Kotlin 扩展Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。扩展函数扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式:fun receiverType.functionName(params){ body}receiverType:表示函数的接...转载 2019-12-28 17:23:23 · 193 阅读 · 0 评论 -
Kotlin学习系列——双冒号 :: 使用
Kotlin 中 双冒号操作符 表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法。先来看一下例子:fun main(args: Array<String>) { println(lock("param1", "param2", ::getResult))}/** * @param str1 参数1 * @param str2 参数...转载 2020-01-08 16:56:45 · 546 阅读 · 0 评论 -
kotlin学习系列——“==”和“===”的区别
code 1fun main(args: Array<String>) { val a : Int = 1000 println(a == a) //true println(a === a) //true val a1 : Int = a val a2 : Int = a println(a1 == a2) //t...转载 2020-01-09 12:08:39 · 151 阅读 · 0 评论 -
Kotlin中 ?、!!、?:、:: 、->符号的简单说明
Kotlin 中新增了一些符号,先记录在案,方便理解和学习。1. ? 和 !!"?"加在变量名后,系统在任何情况不会报它的空指针异常。"!!"加在变量名后,如果对象为null,那么系统一定会报异常!上述是两个符号的简单概念,为了更好的解释这两个概念,我们先从java代码入手,如下例:ArrayList<String> myList = null; // 创建一个nu...转载 2020-01-07 16:27:33 · 25164 阅读 · 2 评论 -
Kotlin学习系列——通用对象方法
今天我们来说说Kotlin中的通用对象方法。什么是通用对象方法呢?其实就是所有对象都拥有的方法,再进一步说,就是toString()、equals()和hashCode()。今天就来看看Kotlin中的这几个方法。老规矩,先来稍微提一下在Java中这三个方法的一些知识点,再对比着来看。Java中的通用对象方法在Java中,这几个方法都是Object的方法。 toString()是...转载 2020-01-09 10:45:19 · 191 阅读 · 0 评论 -
Kotlin学习系列——目录和包
今天我们学习Kotlin的目录和包。前面我们了解了Kotlin的类和属性,但是我们都只是写了很少的代码,当代码量增加时,我们就需要一定的方法来组织和分类存放我们的代码,以便于整个项目的维护,如果我们将所有的代码都写在一个kt文件中是不行的。一旦我们开始写出多个kt文件,就涉及到多个文件和类之间的互相调用,这就是我们这一节讨论的Kotlin的目录和包。Java中的目录和包我们先说一下J...转载 2020-01-09 10:40:29 · 454 阅读 · 0 评论 -
Kotlin学习系列——null的处理
NullPointerException,俗称NPE,不管菜鸟还是老鸟们,都是不可避免,经常遇到的一个异常,解释起来很简单,就“空指针”三个字。总是在一次不小心,而掉进这个陷阱里。Kotlin 的设计目标就是希望消除代码中 null 引用带来的危险, 也就是所谓的造成十亿美元损失的大错误.NPE的原因尽管Kotlin希望消除代码中的NPE,我们总是不小心,总会不小心又掉进NPE的陷阱,下面是可...转载 2020-01-08 15:03:14 · 534 阅读 · 0 评论 -
Kotlin学习系列——运算符重载
Kotlin支持标准的算术运算表达式, 其中运算符被声明为相应类的成员。Kotlin源代码中,我们可以自定义类型的运算符实现,即运算符的重载。这些运算符有固定的表示, 和固定的优先级。Kotlin为基本类型提供了固定名称的数值函数,比如二元运算符的左值和一元运算符的参数类型。运算符的优先级运算符重载预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的...转载 2020-01-08 15:01:17 · 282 阅读 · 0 评论 -
Kotlin学习系列——异常
概述在Kotlin-null的处理里提到的NPE,它就是一个异常。而,异常是程序运行过程中出现的错误。在Kotlin中,所有的异常都继承于Throwable。对于每一个异常而言,它不仅仅包括异常的信息,还可以选择性包括异常的原因,而其原因也是一个异常的实例。抛出异常使用 throw表达式抛出异常:throw MyException("Hi There!")1捕获异常如果在函数内部抛出...转载 2020-01-08 14:59:06 · 571 阅读 · 0 评论 -
Kotlin学习系列——集合详解(二)
概述自从Java 8支持了lambda表达式以来,Lambda表达式是实现大量函数特性的基础,让Java开发越来越趋向于流程式开发。在Kolin中,对Lambda表达式有完美的支持,又因为扩展这一特性,Kotlin也走在了函数式编程的前沿。对于集合,Kotlin提供的不同类型集合,在标准库中,对这些集合实现了一些扩展,以更种方式对集合操作。熟练的函数式编程的基础,是对相关函数有一定的认识和了解。...转载 2020-01-08 14:55:20 · 321 阅读 · 0 评论 -
Kotlin学习系列——集合详解(一)
概述集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。集合的分类:Set(集)List(列表)Map(映射)在Kotlin中,明确的区分了可变和只读的集合(list, set, map等),明确的确定了集合的可读性,有助于良好的编码,以及便于Bug的规避。IterableIterable接口是最基本的接口,声明了Kotlin中...转载 2020-01-08 14:54:23 · 770 阅读 · 0 评论 -
Kotlin学习系列——委托
委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。Kotlin 直接支持委托模式,更加优雅,简洁。Kotlin 通过关键字 by 实现委托。类委托类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。以下实例中派生类 Derived 继承了接口 Base 所有方法,并且委托一个传入的 Base 类的...转载 2019-12-30 08:52:17 · 102 阅读 · 0 评论 -
Kotlin学习系列——枚举类
枚举类最基本的用法是实现一个类型安全的枚举。枚举常量用逗号分隔,每个枚举常量都是一个对象。enum class Color{ RED,BLACK,BLUE,GREEN,WHITE}枚举初始化每一个枚举都是枚举类的实例,它们可以被初始化:enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00)...转载 2019-12-30 08:45:42 · 210 阅读 · 0 评论 -
Kotlin学习系列——泛型
Kotlin 泛型泛型,即 “参数化类型”,将类型参数化,可以用在类,接口,方法上。与 Java 一样,Kotlin 也提供泛型,为类型安全提供保证,消除类型强转的烦恼。声明一个泛型类:class Box<T>(t: T) { var value = t}创建类的实例时我们需要指定类型参数:val box: Box<Int> = Box<Int...转载 2019-12-28 17:30:33 · 132 阅读 · 0 评论 -
Kotlin学习系列——可见性修饰符
今天一起来看看Kotlin中的可见性修饰符。Java的访问修饰符首先也是简单先说一下Java中的可见性修饰符相关的概念,这里用一个表格来对比着看一下。 访问修饰符 类 包 子类 其他包 public √ √ √ √ protected √ √ √ x 默认 √ √ x x pri...转载 2019-12-28 16:22:55 · 251 阅读 · 0 评论