前言
最近想做一个小项目,遇到了后台开发问题,从Python、Go、Nodejs、Java、Kotlin中我对比选择了一下,最后还是决定使用自己最熟悉的Java开发,后来又想了一下,既然现在Android开发都是用Kotlin了,而且Kotlin语法这么灵活简介,为何不用Kotlin结合Gradle构建来搭建一个SpringBoot工程呢,整个过程也是本人在逐渐摸索,中间可能会遇到很多障碍和问题,但是没关系,俗话说开弓没有回头箭,因为我已经决定开始了。
之前我有写过一个开源的Java实现的基于MVP架构的开源Android工程基本结构《MVP架构的Android基础框架》。
最近在用Kotlin做项目,计划使用MVP架构在开始一个新的项目,来继续聊聊Kotlin中MVP的实现。
参考链接:
复杂的软件必须有清晰合理的架构,否则无法开发和维护。MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用。
MVC中所有通信都是单向的。
MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向,MVP 非常重要的一点是基于测试,P 层不应该有任何 android sdk 的代码,mock M 和 V 层后,可以脱离 android 直接对 P 层进行 Java Test。
参考链接:
泛型的目的是让我们写一套代码可以支持不同的数据类型,下面我们实现一个简单的集合。
|
|
我们实现的集合可以添加任意类型的数据(因为Java中Object是所有类的超类)
|
|
但是这样的代码有着很大的缺陷,因为需要类型的强制转换,这种转换错误是在编译期间发现不了的,在Java 1.5之前是没有泛型的,就是这样做的。泛型同样可以实现这个需求,但是通过面向对象的多态特性避免了类型强转,而且在编译期间就能发现类型问题。
参考链接:
在使用Kotlin开发Android中我们可以使用安卓扩展库来方便Android开发。
|
|
参考链接:《聊一聊Kotlin扩展函数run,with,let,also和apply的使用和区别》
前面几篇我们了解了kotlin的语法和概念的东西,接下来我们在实际使用中看看kotlin带给我们的惊喜。
先来看一段代码:
|
|
其中 avaliable_time 资源的定义如下
|
|
最终打印结果为:有效期3年
上面这个特点就是Kotlin扩展函数带给我们的福利。
参考链接
Kotlin中使用object关键字来代替Java中的匿名内部类实现。
在Java中很多时候我们需要一个一次性对象,可以使用匿名内部类来实现,如下:
|
|
在Kotlin中也支持同样的写法:
|
|
参考链接: 《Kotlin实战》
在Kotlin中并不区分基本数据类型和包装类型,例如:
|
|
大多数情况下Kotlin的Int类型会被编译成Java的基本数据类型,用作泛型类型参数的基本类型会被编译成Java的包装类型。
在Kotlin中的可空类型不能用Java的基本类型表示(例如:Int?、Boolean?),这个时候会被编译成对应的Java包装类型。
|
|
上面代码的listOf集合类的参数是泛型,所以会编译成java的包装类型,所以要高效的存储基本类型建议用数组来存储。
参考链接: 《Kotlin实战》
可空性是Kotlin的一个重要特性,可以帮助我们避免发生NullPointerException.
|
|
上面的Java代码如果我们传入空参数就会导致NullPointerException.
但是,和上面等价含义的Kotlin语句在编译期就能标记出错误,如下:
|
|
函数参数被声明为String类型,所以必须包含一个非null的String实例,这样在Kotlin中就保证了不会在运行时抛出NullPointerException.
参考链接
装饰器模式又名包装模式,来以对客户透明的方式(客户端并不觉得修饰前后的区别)扩展对象的功能,是继承关系的一种替代方案。
在装饰模式中的角色有:
参考链接
Lambda 表达式本质上就是可以传递给其他函数一小段代码。
有了 Lambda 可以轻松地把通用代码结构抽取成函数库,Kotlin 标准库大量使用了它。
我们知道,对于一个 Java 变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个 Java 变量,应该怎么做呢?
在 Java 8 之前,这个是做不到的。但是 Java 8 问世之后,利用 Lambda 特性,就可以做到了。
|
|
简便写法
|
|
这样我们就将一个代码块成功赋值给了变量,那么 aBlockOfCode 的类型是什么呢?
本文参考资料
最近接手一个项目是用 IDE
把之前的 Java 代码转成了 Kotlin
的,索性现在就多花些时间来窥探一下 Kotlin,计划在接下来的开发中使用 Kotlin 来完成。
Kotlin 在 2016 年发布了其第一个稳定版本 v1.0,紧跟着在 2017 年的 Google I/O
大会就正式宣布被 Android 平台支持。
Kotlin 具有很多下一代编程语言,静态语言特性:如类型推断、多范式支持、可空性表达、扩展函数、模式匹配等。
其主要设计目标:
把函数当做值来使用,可以用变量保存它,把它当做参数传递,或者当做其他函数的返回值。
使用不可变对象,创建后状态不能再变化。
|
|
在kotlin中除了(for、do 和 do\while)以外大多数控制结构都是表达式。
|
|