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

1.引入

咱们都知道, Java 做为 门面向对象的语言,须要全部的代码都写做类的函数。大多数状况下,这种方式还能行得通。但事实上,几乎全部的大型项目,最终都有不少的代码并不能归属到任何 个类中。有时一个操做对应两个不一样的类的对象,并且重要性相差无几。有时存在 个基本的对象,但你不想经过实例函数来添加操做,让它的 API 继续膨胀。结果就是,最终这些类将不包含任何的状态或者实例函数,而是仅仅做为一堆静态函数的容器。在 JDK 中, 最适合的例子应该就是 Collections了。看看你本身的代码,是否是也有一些类自己就以Util做为后缀命名。 在kotlin中,根本就不须要去建立这些无心义的类, 相反,能够把这些函数接放到代码文件的顶层,不用从属于任何的类。这些放在文件顶层的函数依然是包内的成员,若是你须要从包外访问它,则须要 import 但再也不须要额外包一层。java

2.顶层函数

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

package com.smartcentury.agriculturalmarket.utils

fun getKotlin():String{
    return "Kotlin"
}
复制代码

如今咱们看一下如何在其余包中引用它:函数

import  com.smartcentury.agriculturalmarket.utils.getKotlin

getKotlin()
复制代码

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

可是咱们可能会有个疑问,若是咱们想要在Java中调用这个方法应该如何调用呢?spa

在Java中调用Kotlin顶层函数。3d

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

第一步:在IDE中打开你须要查看反编译的代码文件,而后打开顶部的"Tools",选择"Kotlin",再选择"Show Kotlin ByteCode"cdn

在这里插入图片描述

第二步:点击右侧“Decompile” 对象

在这里插入图片描述

咱们会获得另一个文件blog

在这里插入图片描述

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

  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经常使用的顶层方法。

相关文章
相关标签/搜索