Kotlin开发Android(一)

前面几篇对Kotlin做了基础性的讲解,后续会带来开发Android的分享。

一、扩展函数

扩展函数概念:Kotlin允许开发者在不改变已有类的情况下,为某个类添加新的函数。(普通的Java要做到这一点基本就得重写方法,或者用Dagger2)。举个栗子

   /**
     * java关闭io流
     */
    public static void closeIO(Closeable closeable) {
        if (closeable != null) {
            try {
                closeable.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

用Kotlin可以用扩展函数来写

fun Closeable?.closeIO() {
    try {
        this?.close()
    } catch (e: Throwable) {
    }
}

实现了该接口的类都可以使用该方法

实际开发中,使用Gilde就可以很好的运用扩展函数

fun ImageView.get(url: String): GlideRequest = GlideApp.with(context).load(url)

/**
 * 占位符矩形
 */
fun ImageView.load(url: String) {
    get(url).placeholder(R.drawable.default)
            .error(R.drawable.default)
            .into(this)
}

fun ImageView.loadCircle(url: String) {
    get(url).placeholder(R.drawable.default)
            .error(R.drawable.default)
            .into(this)
}

二、巧用with

with是将某个对象作为函数的参数,在函数块内可以通过 this 指代该对象。

@kotlin.internal.InlineOnly
public inline fun  with(receiver: T, block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return receiver.block()
}

普通方式

holder.itemView.tv_game_name.text = content.name
holder.itemView.tv_bound_user_name.text = content.bound_user_name

用完之后

with(content) {
holder.itemView.tv_game_name.text = name
holder.itemView.tv_bound_user_name.text = bound_user_name
}

三、尾随闭包

直接举个栗子

    public  Disposable register(Class eventType, Consumer onNext) {
        return toObservable(eventType).observeOn(AndroidSchedulers.mainThread()).subscribe(onNext);
    }

用Kotlin就是这样

RxBus.get().register(LogoutEvent::class.java,{
            refresh()
        })

简化写法就是这样,由于最后一个参数是一个方法或者说是一个闭包,可以把方法或者闭包提到最外面。

RxBus.get().register(LogoutEvent::class.java) { refresh() }

四、不需要findViewById

使用Kotlin Android Extensions插件即可实现该功能。
我们在各个modules的build.gradle中添加该插件,即可使用。

apply plugin: 'kotlin-android-extensions'

布局文件中的id,可以直接在代码中使用。
例如MainActivity,它的布局文件是activity_main.xml
则按照如下的方式进行import

import kotlinx.android.synthetic.main.activity_main.*

布局中的控件ID就能直接在activity中使用。

结语

还有很多值得分享的地方,后续会继续写关于这方面的内容。

你可能感兴趣的:(Kotlin开发Android(一))