Android 使用Kotlin开发(一)

本文为自己学kotlin时的一些笔记


Kotlin的特色

Kotlin作为Java的改良,在Android开发中有很多优势,我们先从相对直观的界面绘制开始了解,然后看看Kotlin的语法特点,再慢慢去接触更深层次的编程思想。

简化findViewById

我们知道,Android的架构里,xml布局文件和Activity是松耦合的,Activity中要使用界面元素,必须借助R文件对xml控件的记录,用findViewById找到这个元素。

在Kotlin中我们可继续使用findViewById去绑定xml布局中的控件:(TextView)findViewById(R.id.hello);

进一步引用Anko之后,可以使用find函数去绑定控件:find(R.id.hello),不需要类型转换

同时,Kotlin还提供一种更激进的方法,通过在gradule中引用applyplugin:’kotlin-android-extensions’,彻底取消findViewById这个函数,具体做法如下:

首先,在app的gradule中,添加引用

Android 使用Kotlin开发(一)

然后,在Activity中直接根据id使用界面元素

Android 使用Kotlin开发(一)

按住Ctrl键,会提示我们这个控件详情

Android 使用Kotlin开发(一)

点击后,可以直接跳转到xml文件中的控件位置,光标会停留在Id处

Android 使用Kotlin开发(一)

这种特性令人联想起C#语言中对界面控件的管理,在C#里,界面的控件可以直接调用,不需要find,这是因为在创建一个Form1.cs界面文件时,IDE会自动创建一个对应的额Form1.designer.cs类,在这个类里,自动管理所有界面控件的对象。

Kotlin也是类似的思路,它会遍历你的xml文件,创建对应的虚拟包给你引用(用Alt+Enter引用),我们使用的控件对象,其实是这个虚拟包里的控件对象。

Android 使用Kotlin开发(一)

Kotlin的语法特点

1.在kotlin语法里,代码行不需要“;”结尾。

2.重要的 “:
在java里,主要在运算符里出现(for switch 三元)

在kotlin中 的地位大大提升了,他的用途非常广泛

定义变量类型

var name:String=”my name” //变量name为String类型

定义参数的类型

fun makeTool(id:Int){ //参数id为Int类型}

定义函数的返回值

fun getAddr(id:Int):String{ //返回值为String类型}

声明类/接口的继承

class KotlinActivityUI :AnkoComponent{//继承AnkoComponent接口

来使用Java类

val intent = Intent(this, MainActivity::class.java) //需要用::来使用Java类,注意是两个“”

3.没有new
kotlin来实例化一个对象不需要new

var list=ArrayList()

4.变量常量类型推断

var定义变量

var name:String=”my name”

val定义常量(相当于final)

val TAG:String=”ClassName”

由于kotin可以类型推断上面的2个例子可以简化成

var name=”my name”

val TAG=”ClassName”

5.初始化和延迟加载

在java里我们可以自己定义一个变量,但是并不赋值(int和boolean会有默认值)

但是kotlin必须为变量赋值,如果只写一个变量 却不赋值 如下

var name

编译器会报错,提示你未初始化,你必须赋值0或者null,或者别的一些值

不过有时候我们并不能在定义变量时就初始化他,比如我们在Android中定义一个view控件,或者预定义一个适配器,我们只有在onCreateView()的时候才初始化

针对这种情况,kotlin提供了懒加载lazy机制来解决这个问题,在懒加载机制里,变量只有在第一次使用时才会初始化,可以这样写

Android 使用Kotlin开发(一)

lazy只适用于val对象,对于var对象,需要使用lateinit

Android 使用Kotlin开发(一)

6.空指针安全
在kotlin里可以用“?”表示可以为空 用“!!”表示不可以为空
空指针安全并不是不需要处理空指针,你用“”声明的某个变量时可以为空的

var num:Int?=null

声明允许为空时,不能使用类型推断,必须声明其数据类型

空指针虽然安全了,但是需要视情况而定,有时候可以为空 有时候做数据检查,有时候抛出异常

val v1 =num?.toInt() //不做处理返回 null

val v2 =num?.toInt() ?:0 //判断为空时返回0

val v3 =num!!.toInt() //抛出空指针异常(用“!!”表示不能为空)

7.定义函数
在kotlin中可以这样定义函数

fun 方法名(参数名:类型,参数名:类型…) :返回类型{

}

所以可以这样写

Android 使用Kotlin开发(一)

由于kotlin可以对函数的返回值进行类型推断,所以经常使用“=”代替返回类型和“return”关键字 上面的代码可以写成

Android 使用Kotlin开发(一)

如果我们的函数代码只有一行可以简化成

Android 使用Kotlin开发(一)

函数也可以空指针安全,在返回类型后面加“”即可

Android 使用Kotlin开发(一)

有时候函数的类型为Unit 代表java的void 代表没有返回

Android 使用Kotlin开发(一)

在方法没有返回值时 也可以不写Unit

Android 使用Kotlin开发(一)

8.用is代替了instance of

Android 使用Kotlin开发(一)

9.in 区间 集合
在kotlin中有区间的概念 比如2..8就是2到8的整数区间

Android 使用Kotlin开发(一)

也可以用in判断集合是否包含某个元素
Android 使用Kotlin开发(一)

for循环的使用方法

Android 使用Kotlin开发(一)

可以倒序遍历

Android 使用Kotlin开发(一)

当然也可以反转

Android 使用Kotlin开发(一)

可以指定步长(即每次走多少)

Android 使用Kotlin开发(一)

10.when代替了switch

Android 使用Kotlin开发(一)

11.字符串模板 在java中字符串的可读性较差

MessageFormat.format(“{0}xivehribuher{1}xhvihuehewogweg”,para0,para2);

在字符串比较长时,你不知道字符串要表达什么

在kotlin中字符串可读性更好

Android 使用Kotlin开发(一)

这篇文章就到这里了 在后续的文章中将会对Kotlin的新特性 一 一介绍

在后续的文章中前三篇将会对Kotlin做一个详细的讲解(篇幅会有点大)

之后将会使用Kotlin写几个Android Demo并且会封装一个网络请求库

代码同步GitHub

GitHub