花了四五天的时间看完了kotlin-docs和kotlin-for-android-developers并写了一个小app实战一下。于是打算写两篇文章,第一篇记录一下kotlin相对java的一些不同,kotlin的一些独特用法,主要是来入个门,第二篇文章带来一个实战,用kotlin实现了一个爬虫类的app。
- 如何定义变量
Java 定义变量的写法:
String string = "Hello";
基本等价的 Kotlin 定义变量的写法:
var string: String = "Hello"
kotlin中有两种声明变量的关键字,var和val,var是可变的,val是不可变得。
- 如何定义函数
Java 当中如何定义函数,也就是方法,需要定义到一个类当中:
public boolean testString(String name){
...
}
等价的 Kotlin 写法:
fun testString(name: String): Boolean {
...
}
还有就是很多时候直接用lambda表达式了,不用再拘泥于这样的格式。
- 如何定义静态变量、方法
Java 的静态方法或者变量只需要加一个 static 即可:
public class Singleton{
private static Singleton instance = ...;
public static Singleton getInstance(){
...
return instance;
}
}
用 Kotlin 直译过来就是:
class KotlinSingleton{
companion object{
private val kotlinSingleton = KotlinSingleton()
@JvmStatic
fun getInstance() = kotlinSingleton
}
}
这里的@JvmStatic与java中的static几乎一样。
- 如何实例化类
Java 和 C++ 这样的语言,在构造对象的时候经常需要用到 new 这个关键字,比如:
Date date = new Date();
Kotlin 构造对象时,不需要 new 这个关键字,所以上述写法等价于:
val date = Date()
- 还有一些比较特殊的用法如延迟加载
Kotlin 有办法,使用 lazy 这个 delegate 即可:
class Hello{
private val name by lazy{
hahahaha()
}
}
- lambda表达式
和java中几乎一样就不多说了 - 扩展函数
将在下一篇实战中看到具体的例子。 - 开发前的准备
buildscript {
ext.kotlin_version = '1.1.3'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
compile 'org.jetbrains.anko:anko-common:0.10.0'
compile "org.jetbrains.anko:anko-sqlite:0.10.0"
compile "org.jetbrains.anko:anko-coroutines:0.10.0"