添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我们都知道, 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”

我们会得到另外一个文件

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

  • 顶层文件会反编译成一个容器类。(类名一般默认就是顶层文件名+"Kt"后缀,注意容器类名可以自定义)
  • 顶层函数会反编译成一个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常用的顶层方法。

    朱涛的自习室 Kotlin
    私信