背景
最近我们在做区块链相关的钱包项目,新的App使用全新的技术栈。在Android中我们使用Kotlin+RxJava+Android Architecture Components,在iOS中使用Swift+RxSwift。本文不讨论App的架构,只讨论项目中所使用到的Kotlin的特性。
在Android的App中,可以毫不夸张地说,我们95%以上的代码使用了Kotlin开发的。由此,很有必要对这一阶段使用Kotlin做一个简单的小结。
使用的Kotlin特性:
一.扩展函数
Kotlin允许开发者在不改变已有类的情况下,为某个类添加新的函数。这个特性叫做扩展函数。
举一个简单的例子。如果要关闭一个I/O流,使用Java可能是写一个工具方法。
/**
* 安全关闭io流
* @param closeable
*/
public static void closeQuietly(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
对Kotlin而言,可以对Closeable扩展一个函数closeQuietly()。
fun Closeable?.closeQuietly() {
try {
this?.close()
} catch (e: Throwable) {
}
}
之后,任何实现了Closeable接口的类,都可以使用它本身的closeQuietly()方法来关闭流。我们不再需要那个工具方法了。
在项目中,我们使用扩展函数对Glide做了封装,大大简化了Glide的使用。
/**
* 占位符矩形
*/
fun ImageView.load(url: String) {
get(url).placeholder(R.drawable.shape_default_rec_bg)
.error(R.drawable.shape_default_rec_bg)
.into(this)
}