2017年的Google I/O中,Google 宣布 Kotlin 成为 Android 官方开发语言。学习Kotlin,大势所趋。
1.学习参考
推荐学习的网站:
Kotlin官网: http://kotlinlang.org/
Kotlin中文网:https://www.kotlincn.net/
Kotlin教程-菜鸟驿站: https://www.runoob.com/kotlin/kotlin-tutorial.html
实战Demo演练:
Kotlin+MVP:https://www.jianshu.com/p/03fe59b88e65
2.Android Studio环境配置
-
下载Kotlin插件
如果已安装的Android Studio版本是3.0+,Kotlin插件已经内置在Studio里了,如果低于3.0则按照File-Setting-Plugins安装并重启即可。
-
创建Kotlin工程
注意选择语言为Kotlin
3.学习体会及心得
Kotlin和Java的区别:
1.声明空变量
Java:
final String name = null;
String lastName;
lastName = null
Kotlin:
val name: String? = null
var lastName: String?
lastName = null
var firstName: String
firstName = null
2.Null Safe下使用变量/对象
Java:
if(text != null){
int length = text.length();
}
Kotlin:
val length = text?.length
val length = text!!.length
3.定义带默认值的函数
Java:
public void hello(String name) {
if (name == null) {
name = "World";
}
System.out.print("Hello, " + name + "!");
}
Kotlin:
fun hello(name: String = "World") {
println("Hello, $name!")
}
4.定义主构造函数
Java:
final class User {
private final String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Kotlin:
class User(val name: String)
5.单例模式
Java:
public class Document {
private static final Document INSTANCE = new Document();
public static Document getInstance(){
return INSTANCE;
}
}
Kotlin:
object Document {
}
6.创建对象
Java:
final File file = new File("file.txt");
Kotlin:
val file = File("file.txt")
7.Java中findViewById 的替代
Java:
Button mButton = findViewById(R.id.button);
Kotlin:
button.setText("Kotlin")
8.xxxx
Java:
Kotlin:
Kotlin的优点:
1.空类型安全
- 多使用?:、?.操作符,以及let{}函数
- 尽可能的使用as?操作符去替换掉as,在不确定是否可以安全转换的情况下不使用toXXX()方法
2.Lambda表达式
java8:
// 这里举例一个Android中最常见的按钮点击事件的例子
mBtn.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
Toast.makeText(this,"onClick",Toast.LENGTH_SHORT).show()
}
})
Kotlin:
mBtn.setOnClickListener { Toast.makeText(this,"onClick",Toast.LENGTH_SHORT).show() }
3.扩展函数
//-----------------------扩展函数(本类中扩展方法)-------------------------------------
class Test1 {
var name: String = "boyi.chen"
}
//Test1:接收器类型(receiver type)
//this: 接收器对象(receiver object)
fun Test1.temp() {
println("增加扩展函数,打印扩展类的属性name=${this.name}")
}
fun main(args: Array<String>) {
//-----------------------扩展函数(本kt文件)-------------------------------------
Test1().temp()//输出结果-------------------------增加扩展函数-------------------------
}
4.类型推导
kotlin能为我们自动推导变量的类型而不需要我们指定。
var a:Any = Any();
a = 8;
//重新赋值
a = "anjie";
5.无缝调用Java代码
java:
public class Animal {
private int age;
private String name;
public Animal(int age, String name) {
this.age = age;
this.name = name;
}
}
Kotlin:
val animal = Animal(3, "twodog")
println(animal.age)//读取
animal.name = "dahuang"//修改