
Kotlin学习之路
文章平均质量分 65
Kotlin菜鸟进阶之路,根据《Android 第一行代码(第三版)》记录学习
pgc_tel
简简单单写点代码
展开
-
Kotlin(十九) 泛型的高级特性
关键字这两个前提条件。那么借助泛型实化,到底可以实现什么样的效果呢?这样的语法在Java中是不合法的,而在Kotlin中,借助泛型实化功能就可以使用。这是很常见的一种写法,但是我们如果使用泛型实化来简化它呢?怎么写才能将泛型实化呢?首先,该函数必须是内联函数才行,也就是要用。关键字来修饰该函数。其次,在声明泛型的地方必须加上。关键字来表示该泛型要进行实化。就是一个被实化的泛型,因为它满足了内联函数和。函数直接返回了当前指定泛型的实际类型。现在我们可以使用如下代码对。原创 2023-12-16 08:00:00 · 415 阅读 · 0 评论 -
Kotlin(十八)使用infix函数构建更可读的语法
infix函数是什么难理解的事物,它只是把编程语言函数调用的语法规则调整了一下而已,比如A to B这样的写法,实际上等价于A.to(B)的写法。这个代码一定返回为true的。函数的用法虽然非常简单,但是借助infix函数,我们可以使用一种更具可读性的语法来表达这段代码。首先,除去最前面的infix关键字不谈,这是一个String类的扩展函数。我们给String类添加了一个函数,它也是用于判断一个字符串是否是以某个指定参数开头的,并且它的内部实现就是调用的String类的函数。但是加上了infix。原创 2023-12-15 15:07:34 · 650 阅读 · 0 评论 -
Kotlin(十七) 泛型和委托
成为了一个全新的数据结构类,我们也不用实现原有的方法,因为我们已经把工作委托给了HashSet。如果我们想新增或者重写里面的方法,直接在类里面新增或者重写就好了。这样我们的类委托就已经完成。委托是一种设计模式,它的基本理念是:操作对象自己不会去处理某段逻辑,而是会把工作委托给另外一个辅助对象去处理。泛型主要有两种定义方式:一种是定义泛型类,另一种是定义泛型方法,使用的语法结构都是。并不是固定要求的,事实上你使用任何英文字母或单词都可以,但是通常情况下,这是一种标准的代码实现模板,在。原创 2023-12-14 12:07:28 · 543 阅读 · 0 评论 -
Kotlin(十六) 高阶函数的简单应用
高阶函数非常适用于简化各种API的调用,一些API的原有用法在使用高阶函数简化之后,不管是在易用性还是可读性方面,都可能会有很大的提升。所以我们可以通过高阶函数来使一些API变得更简单更易读。在我们APP存储数据时,通常会用到SharedPreferences 这个API,那么我们现在尝试使用高阶函数来简化它。原创 2023-12-13 15:14:19 · 930 阅读 · 0 评论 -
Kotlin(十五) 高阶函数详解
高阶函数和Lambda的关系是密不可分的。在之前的文章中,我们熟悉了Lambda编程的基础知识,并且掌握了一些与集合相关的函数式API的用法,如mapfilter函数等。另外,我们也了解了Kotlin的标准函数,如runapply函数等。这些函数有一个共同的特点:它们都会要求传入一个Lambda表达式作为参数。像这种接收Lambda参数的函数就可以称为具有函数式编程风格的API,而如果你想要定义自己的函数式API,那就得借助高阶函数来实现了。原创 2023-12-08 12:19:22 · 600 阅读 · 0 评论 -
Kotlin(十四) 扩展函数和运算符重载
我们只需要创建一个为String.kt的文件,对于文件名我们可以随便命名,但是最好还是创建哪个类的扩展函数就以哪个类为文件名,这样便于查找,也方便后续的合作开发。的语法看上去好像很神奇,但其实这就是Kotlin给我们提供的一种语法糖,它会在编译的时候被转换成。都是固定不变的,而接收的参数和函数返回值可以根据你的逻辑自行设定。类之外,你还可以向任何类中添加扩展函数,Kotlin对此基本没有限制。关键字,就可以实现运算符重载的功能了。类的扩展函数,那么函数中就自动拥有了。相加,然后将得到的和传给一个新的。原创 2023-12-06 11:57:20 · 1224 阅读 · 0 评论 -
Kotlin(十三) 延迟初始化和密封类
另外再多说一句,密封类及其所有子类只能定义在同一个文件的顶层位置,不能嵌套在其他类中,这是被密封类底层的实现机制所限制的。关键字,它可以告诉Kotlin编译器,我会在晚些时候对这个变量进行初始化,这样就不用在一开始的时候将它赋值为。关键字也不是没有任何风险的,如果我们在student变量还没初始化时调用,那么程序还是会崩溃的,并且会抛出。到目前为止,代码都是没有问题的,但比较让人讨厌的是,接下来我们不得不再编写一个。另外,由于密封类是一个可继承的类,因此在继承它的时候需要在后面加上一对括号。原创 2023-12-01 10:40:46 · 1249 阅读 · 0 评论 -
Kotlin(十二) 定义静态方法
不过,使用单例类的写法会将整个类中的所有方法全部变成类似于静态方法的调用方式,而如果我们只是希望让类中的某一个方法变成静态方法的调用方式该怎么办呢?由此可以看出,Kotlin确实没有直接定义静态方法的关键字,但是提供了一些语法特性来支持类似于静态方法调用的写法,这些语法特性基本可以满足我们平时的开发需求了。如果是在Kotlin代码中调用的话,那就很简单了,所有的顶层方法都可以在任何位置被直接调用,不用管包名路径,也不用创建实例,直接键入。中的方法上,如果你尝试加在一个普通方法上,会直接提示语法错误。原创 2023-11-28 11:23:23 · 1723 阅读 · 0 评论 -
Kotlin(十一) 标准函数with、run和apply
函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。函数也是极其类似的,都要在某个对象上调用,并且只接收一个Lambda参数,也会在Lambda表达式中提供调用对象的上下文,但是。函数是一样的,包括也会使用Lambda表达式中的最后一行代码作为返回值返回。这两段代码的执行结果是一模一样的,但是明显第二段代码的写法更加简洁一些,这就是。方法,其他都没有任何区别,这两段代码最终的执行结果是完全相同的。对象,所以我们在最后打印的时候还要再调用它的。原创 2023-11-23 16:41:20 · 186 阅读 · 0 评论 -
Kotlin(十) 空指针检查、字符串内嵌表达式以及函数默认值
空指针检查我们在之前的章节里,有定义一个Study的类,它有两个函数,一个doHomework(),一个readBooks()。这一串代码,看上去会有空指针错误,但实际上是没有的,因为Kotlin默认所有的参数和变量都不可为空,所以这里传入的Study参数也一定不会为空,我们可以放心地调用它的任何函数。如果你尝试传入null,那么编译器会直接报错。原创 2023-11-08 16:56:27 · 602 阅读 · 0 评论 -
Kotlin(九) 集合以及集合API
函数是最常用的一种函数式API,它用于将集合中的每个元素都映射成一个另外的值,映射的规则在Lambda表达式中指定,最终生成一个新的集合。set的创建和遍历和上面基本一样,只是语法变成了 setOf(),mutableSetOf(),如图。② mutableListof() 可变集合,即可进行添加、修改、删除,以及读取。① listOf() 不可变集合,即不可进行添加、修改、删除,只能读取。函数是用来过滤集合中的数据的,它可以单独使用,也可以配合刚才的。原创 2023-10-26 15:09:04 · 158 阅读 · 0 评论 -
Kotlin(八) 数据类、单例
和Java的不同,kotlin的数据类比较简单,New→Kotlin File/Class,在弹出的对话框中输入“Book”,创建类型选择“Data”。单例模式,是最常用、最基础的设计模式之一,它可以用于避免创建重复的对象。关键字时,就表明你希望这个类是一个数据类,Kotlin会根据主构造函数中的参数帮你将。虽然看上去像是静态方法的调用,但其实Kotlin在背后自动帮我们创建了一个。可以看到,在Kotlin中我们不需要私有化构造函数,也不需要提供。另外,当一个类中没有任何代码时,还可以将尾部的大括号省略。原创 2023-10-25 11:54:38 · 539 阅读 · 0 评论 -
Kotlin(七) 接口
接口是用于实现多态编程的重要组成部分。我们都知道,Java是单继承结构的语言,任何一个类最多只能继承一个父类,但是却可以实现任意多个接口,Kotlin也是如此。原创 2023-10-21 11:10:53 · 398 阅读 · 0 评论 -
Kotlin(六) 类
这也是最基本的面向对象的用法:就是要先将事物封装成具体的类,然后将事物所拥有的属性和能力分别定义成类中的字段和函数,接下来对类进行实例化,再根据具体的编程需求调用类中的字段和方法即可。在Java中,一个创建的类直接通过extends关键字就可以被继承,但是在Kotlin中是不行的,它默认创建的类无法被继承,需要通过关键字open。之所以这么设计,是因为当你调用了某个类的构造函数时,你的意图只可能是对这个类进行实例化,因此即使没有。Kotlin中实例化一个类的方式和Java是基本类似的,只是去掉了。原创 2023-09-09 16:05:26 · 645 阅读 · 0 评论 -
Kotlin(五) 循环语句
while循环和for循环。而Kotlin也提供了while循环和for循环,其中while循环不管是在语法还是使用技巧上都和Java中的while循环没有任何区别,因此我们就直接跳过不进行讲解了。原创 2023-09-05 17:58:02 · 550 阅读 · 0 评论 -
Kotlin(四) 条件语句
Kotlin中的条件语句主要有两种:if 和 when1. ifif语句基本和Java中的if语句没有多大的区别,比如在上篇文章Kotlin(三) 语法糖中,我们有个getMaxNum函数,就可以使用if语句来实现,fun getMaxNum( a : Int , b : Int) : Int { if ( a >=b) { return a }else{ return b }}可以看出,Kotlin中的if和Java的if...原创 2021-10-08 11:30:08 · 517 阅读 · 0 评论 -
Kotlin(三) 语法糖
在上篇函数中,我们知道了如何定义函数,那么现在定义个函数,取两个数中比较大的数:fun getMaxNum(a : Int,b : Int) : Int { return max(a,b)}然后在main函数中调用一下,fun main () { val a=30; val b=43; val max=getMaxNum(a,b) println("max num is "+max)}这样我们运行打印出来的Log就是 max num i...原创 2021-08-24 11:07:09 · 786 阅读 · 1 评论 -
Kotlin(二)函数
函数的解释kotlin的函数其实就是Java中的方法,他们代表的意思是一样的,搞清楚这个,就知道,函数其实就是代码运行的载体。函数的定义java中使用-访问修饰符+返回值类型+方法名+(参数列表)的形式定义方法,而在kotlin中,则使用fun来定义一个函数,例如:无返回值:publicvoid setName(String name);fun setName(name:String)有返回值:public int getMax(int a,int b){ ...原创 2021-08-18 10:27:14 · 218 阅读 · 1 评论 -
Kotlin(一):定义变量
JAVA在Java中如果想要定义一个变量,需要在变量前面声明这个变量的类型,比如说int a表示a是一个整型变量,String b表示b是一个字符串变量,例如int a;String bKotlin很简单只允许在变量前声明两种关键字:val和var。例如:valavar b说明:val(value的简写)用来声明一个不可变的变量,这种变量在初始赋值之后就再也不能重新赋值,对应Java中的final变量。var(variable的简写)用来声明一个可变的变量,这种变量在初始赋.原创 2021-08-13 12:44:55 · 2277 阅读 · 1 评论