关于kotlin:Kotlin实战消除静态工具类顶层函数和属性

47次阅读

共计 1732 个字符,预计需要花费 5 分钟才能阅读完成。

1. 引入

咱们都晓得,Java 作为 门面向对象的语言,须要所有的代码都写作类的函数。大多数状况下,这种形式还能行得通。但事实上,简直所有的大型项目,最终都有很多的代码并不能归属到任何 个类中。有时一个操作对应两个不同的类的对象,而且重要性相差无几。有时存在 个根本的对象,但你不想通过实例函数来增加操作,让它的 API 持续收缩。后果就是,最终这些类将不蕴含任何的状态或者实例函数,而是仅仅作为一堆动态函数的容器。在 JDK 中,最适宜的例子应该就是 Collections 了。看看你本人的代码,是不是也有一些类自身就以 Util 作为后缀命名。在 kotlin 中,基本就不须要去创立这些无意义的类,相同,能够把这些函数接放到代码文件的顶层,不必从属于任何的类。这些放在文件顶层的函数仍然是包内的成员,如果你须要从包外拜访它,则须要 import 但不再须要额定包一层。

2. 顶层函数

见名知意,原来在 Java 中,类处于顶层,类蕴含属性和办法,在 Kotlin 中,函数站在了类的地位,咱们能够间接把函数放在代码文件的顶层,让它不从属于任何类。就像上面这样,咱们在一个 Test.kt 文件中写入如下的 Kotlin 代码。

package com.smartcentury.agriculturalmarket.utils

fun getKotlin():String{return "Kotlin"}

当初咱们看一下如何在其余包中援用它:

import  com.smartcentury.agriculturalmarket.utils.getKotlin

getKotlin()

咱们只须要导入包,而后间接调用就能够了。

然而咱们可能会有个疑难,如果咱们想要在 Java 中调用这个办法应该如何调用呢?

在 Java 中调用 Kotlin 顶层函数。

要想晓得如何在 Java 中调用顶层函数其实很简略,咱们只有将 Kotlin 反编译一下就能够了。上面介绍下如何反编译 Kotlin 代码。

第一步:在 IDE 中关上你须要查看反编译的代码文件,而后关上顶部的 ”Tools”, 抉择 ”Kotlin”, 再抉择 ”Show Kotlin ByteCode”

第二步:点击右侧“Decompile”

咱们会失去另外一个文件

通过以上的代码能够总结出两点内容:

  1. 顶层文件会反编译成一个容器类。(类名个别默认就是顶层文件名 +”Kt” 后缀,留神容器类名能够自定义)
  2. 顶层函数会反编译成一个 static 动态函数,如代码中的 getKotlin 函数

当初咱们应该晓得如何在 java 代码中如何调用了吧。

TestKt.getKotlin();

可能有时候你感觉 Kotlin 为你主动生成的这个类名不好,那你能够通过 @file:JvmName 注解来自定义类名,就像上面这样。

@file:JvmName("MyKotlin")
package com.smartcentury.agriculturalmarket.utils

/**
 * @Author:         Simon
 * @CreateDate:     2019/5/16 16:04
 * @Description:
 */

fun getKotlin():String{return "Kotlin"}

而且要留神,这个注解必须放在文件的结尾,包名的后面。

于是咱们在 Java 文件中能够这样调用

MyKotlin.getKotlin();

3. 顶层属性

理解了顶层函数,上面再看看顶层属性。顶层属性也就是把属性间接放在文件顶层,不依附于类。咱们能够在顶层定义的属性包含 var 变量和 val 常量,就像上面这样。

@file:JvmName("MyKotlin")
package com.smartcentury.agriculturalmarket.utils

/**
 * @Author:         Simon
 * @CreateDate:     2019/5/16 16:04
 * @Description:
 */


val name:String="kotlin"
var type:String="language"

用法和顶层办法一样,这里就不赘述了。

4. 写在最初

顶层属性和办法能够让咱们的代码更加简洁,而且不须要引入多于的类。顶层函数在 Kotlin 外面用法也很宽泛,咱们最罕用的 let()办法就是顶层办法。前面会独自讲到 Kotlin 罕用的顶层办法。

正文完
 0