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

最近开始学习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函数的优势了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容