Kotlin从入门到放弃首页投稿(暂停使用,暂停投稿)Kotlin

初学kotlin,写一个简单的logutils日志类

2017-08-08  本文已影响215人  荒诞的墨墨

最近开始学习kotlin,这里根据kotlin扩展类的特性,写了一个简单的日志管理的类
这里涉及到一些kotlin和java不同的属性,做以下一些简单的解释:
1、inline: 内联函数,是私有类型函数,能节省一些内存开销,下文会接着介绍到inline函数
2、reified: 这个方法的意思是,具体化一个 T 的类型参数,必须以 inline内联方式声明这个 方法才有效。
3、T::class.simpleName:返回一个T::class.simpleName 中的simpleName
4、kotlin: if-else自动返回最后一行
5、这里要注意下,这里用到了反射,但kotlin要使用反射要加入一个依赖库:

implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"

否则会抛出这个异常:

KotlinReflectionNotSupportedError  

日志类

 /**
  *  Created by anymo on 2017/8/7.
  */
val logSwitch = true

inline fun <reified T> log_i(log: Any): String {
    val resultI = if (logSwitch) {
        Log.i(T::class.simpleName, log.toString())
        "OK"
    } else {
        "fail"
    }
    return resultI
}

inline fun <reified T> log_d(log: Any): String {
    val resultD = if (logSwitch) {
        Log.d(T::class.simpleName, log.toString())
        "OK"
    } else {
        "fail"
    }
    return resultD
}

inline fun <reified T> log_w(log: Any): String {
    val resultW = if (logSwitch) {
        Log.w(T::class.simpleName, log.toString())
        "OK"
    } else {
        "fail"
    }
    return resultW
}

inline fun <reified T> log_e(log: Any): String {
    val resultE = if (logSwitch) {
        Log.e(T::class.simpleName, log.toString())
        "OK"
    } else {
        "fail"
    }
    return resultE
}

我们调用是就只要这样写就行了:

//其它的同理调用
log_i<MainActivity>("")

inline函数

上面提到inline(内联函数)函数能节省内存开销, 我们先看调用log_i反编译,看看发生了什么:

log_i反编译.png

如果不加inline函数,反编译是这样的:

反编译不带inline函数.png

inline函数就是把代码整体给拿过来用了,而不是通过对象来掉用这个方法,这样就应该能很明显的感觉到inline函数的优势了

上一篇下一篇

猜你喜欢

热点阅读