版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/waley_yang/article/details/72639563
前言
自从谷歌正式宣布将Kotlin作为android开发的第一语言后,估计所有的安卓程序员此时的内心应该是:“MD,又要学习新的语言了”,我也同样如此。所以就记录一下自己认为对自己有帮助的知识点,以供查询。
1.变量的定义
(
1) java中我们一般定义变量是:
String str = "name";
而Kotlin的定义是:
var str:String = "name"
(2) java中定义final变量的写法
final String str = "name";
而Kotlin的定义是:
val str:String = "name"
简单来说,var是可变的,val是不可变的
2.函数的定义
java中我们一般定义函数(方法)是(无返回值):
public void testName(String name){
......
}
对应Kotlin中的定义是:
fun testName(name:String){
......
}
java中定义函数(方法)是(有返回值):
public String testName(String name){
......
}
对应Kotlin中的定义是:
fun testName(name:String) : String{
......
}
3.数组的定义
java的数组一般定义有:
String[] names = new String[]{"tom","jack};
String[] emptyNames = new String[5];
K
otlin中对应的定义为:
val names:Array<String> = arrayOf("tom","jack")
val emptyNames : Array<String?> = arrayOfNulls(5)
其中,Array<T> T即数组元素类型。String?表示可以为null的String类型
数组的使用基本一致。需要注意的是,为了避免装箱和拆箱的开销,Kotlin对基本类型包括Int、Short、Byte、Long、Float、Double、Char等基本类型提供了定制版数组类型,写法为XArray,例如Int的定制版数组为IntArray,如果我们要定义一个整型数组,写法如下:
val ints = intArrayOf(1,2,3)
4.集合的定义
(1) List集合在Kotlin中是不可变的,创建之后是不允许作任何的修改操作的
a.可以用listOf来创建含有元素的List,数据类型由kotlin根据初始化元素自动进行推断
val list = listOf("tom","jack")
b.可以用emptyList<T>() 创建空List,但是必须显示指定数据类型
val list = emptyList<String>()
(2) MutableList是可变的List.
val mList = mutableListOf<String>()
mList.add("tom")
5.如何实例化类
java中,在构造对象时需要用到new这个关键字:
Date date = new Date();
Kotlin构造对象时,不需要new这个关键字:
val date = Date()
6.如何延迟初始化成员变量
java定义的类成员变量如果不初始化,那么基本类型被初始化为其默认值,比如int初始化为0,boolean初始化为false,非基本类型的成员则会被初始化为null
public class Hello{
private String name;
}
在Kotlin中被直译为:
class Hello{
private var name:String? = null
}
使用了可空类型后,副作用就是后面每次你想要用name的时候,都需要判断其是否为null:name!!。如果不使用可空类型,需要加 lateinit关键字:
class Hello{
private lateinit var name: String
}
lateinit是用来告诉编译器,name这个变量后续会妥善处置的。
对于final的成员变量,java要求他们必须在构造方法或者构造块当中对他们进行初始化:
public class Hello{
private final String name = "tom";
}
也就是说,如果我想定义一个可以延迟到一定实际再使用并初始化的final变量,这在java中是做不到的。
Kotlin中有办法,使用lazy这个delegate即可:
class Hello{
private val name by lazy{
NameProvider.getName()
}
}
7.如何获得class的实例
java当中
:
public class Hello{
......
}
......
Class<?> clazz = Hello.class;
Hello hello = new Hello();
Class<?> clazz2 = hello.getClass();
前面我们展示了两种获得class的途径,一种直接用类名,一种通过类实例。
Kotlin中对应的获取方法:
class Hello
val clazz = Hello::class.java
val hello = Hello()
val clazz2 = hello.javaClass
同样效果的Kotlin代码看上去确实很奇怪,实际上Hellp::class拿到的是Kotlin的kclass,这个是Kotlin的类型,如果想要拿到java的Class实例,就需要前面的方法了