MVP+Kotlin源码体验

Posted 架构师必备

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVP+Kotlin源码体验相关的知识,希望对你有一定的参考价值。


我们在官网中查看一下,发现给实际代码量的对比,比Java的MVP还少,看来Kotlin的语法糖优化得很不错。



从文件目录中简单的观察,和Todo-mvp的工程没太大区别,去别就是里面全都都换成了Kotlin文件。

MVP+Kotlin源码体验


这里引入kotlin 1.1.3-2版本,没有直接介绍使用android Studio3.0的配置(这个大坑,谁踩谁知道)

MVP+Kotlin源码体验


根目录的build.gradle设定了配置版本为api26

MVP+Kotlin源码体验

Api26就是Android O ,已经试验过,Api26,很多接口都有优化修改,如果不用Api26,将无法跑通。

我们继续看看build.gradle中可以使用的改进配置的方式。

useProguard的参数可以配置是否使用混淆

MVP+Kotlin源码体验

applicationIdSuffix可以用于直接添加后缀到applicationId属性的值后

MVP+Kotlin源码体验

源码优化分析


1.Lateinit

 

在View声明阶段,都会需要使用lateinit来延迟声明变量。

MVP+Kotlin源码体验

kotlin中延迟声明还包括lazy的方式

val name: String by lazy {"cangwang"}

lateinit var drwaLayout: drawLayout

区别在于

(1).lazy{} 只能用在val类型, lateinit 只能用在var类型

(2).lateinit不能用在可空的属性上和Java的基本类型上

lateinit var name: String //会报错

(3).lateinit可以在任何位置初始化并且可以初始化多次,因为其衔接的是var变量。而lazy在第一次被调用时就被初始化,其衔接的是val常量,想要被改变只能重新定义



2.findViewById

 

Api26前

MVP+Kotlin源码体验

Api26后

MVP+Kotlin源码体验

很显然Api26后,优化了方法,可以使用泛型来提示对象类型


3.接下来要介绍五个kotlin Standard.kt里面的函数,apply,with,let,run,also


先介绍apply的作用

MVP+Kotlin源码体验

其源码

MVP+Kotlin源码体验

在函数块内可以通过this指代该对象,返回值为该对象自己


with函数

MVP+Kotlin源码体验

其源码

MVP+Kotlin源码体验

将某对象作为函数的参数,在函数块内可以通过this指代该对象。返回值为函数块的最后一行或指定return表达式。


let函数

MVP+Kotlin源码体验

源码

MVP+Kotlin源码体验

将对象为函数的参数,在函数块内可以通过it指代该对象。返回值为函数块的最后一行或指定return表达式。


run函数

MVP+Kotlin源码体验

源码

MVP+Kotlin源码体验

其有两种表达形式

第一种无参数输入。

第二种会将对象本身this给函数调用

返回值为函数块最后一行,或者指定return表达式。


kotlin1.1后 添加了aslo函数


MVP+Kotlin源码体验


其源码

MVP+Kotlin源码体验



这张总截图将会让你更加明白如何调用。

MVP+Kotlin源码体验

其共同点为都能运行函数快,但是四个函数各有差异,大家使用的时候要谨慎选用。


4.Object


单例对象是使用Object声明

Kotlin 没有静态属性和方法,需要使用单例对象来实现类似的功能。


MVP+Kotlin源码体验

Kotlin 没有静态属性和方法,需要使用单例对象来实现类似的功能。

MVP+Kotlin源码体验


5.data


相当于java中定义的数据bean类

MVP+Kotlin源码体验

其可以直接在属性之后编写get()和set()的方法

MVP+Kotlin源码体验


6.@JvmOverloads


MVP+Kotlin源码体验


实现 Java 调用中的方法重载

图示重载的是kotlin类的构造方法,其可以初始化的方法如下。

Task task1 = new Task(“cang_wang");

Task task2 = new Task(“cang_wang","程序员");

Task task2 = new Task(“cang_wang","程序员",“1”);


7.通过字节码反编译


MVP+Kotlin源码体验

可以看到编译后的java字节码

MVP+Kotlin源码体验

使用Decompile按钮反编译后,可以通过Java的代码逻辑看懂编写的kotlin

MVP+Kotlin源码体验


这里都是写的是优化点,其他基本语法就不做过多介绍了。


总结

1.Kotlin的MVP的搭建和Java没太大的区别

2.Kotlin提供很多优化的语法

3.进一步了解kotlin编译的原理,有更高效的提高。


如果你有好的文章想和大家分享欢迎投稿,直接向我投递文章链接即可。




以上是关于MVP+Kotlin源码体验的主要内容,如果未能解决你的问题,请参考以下文章

使用Kotlin开发Android应用初体验

体验:Anko + Kotlin

Kotlin初体验

Kotlin入门体验

Kotlin初体验

使用Kotlin开发Android应用初体验