当前位置:   article > 正文

Kotlin 包和 import 语句使用_kotlin 一个文件多个package

kotlin 一个文件多个package

Kotlin 包和 package 语句

Kotlin 包与 Java 包的概念是一样的,都表示文件结构(语法上并不严格要求),可以起到区分同名源代码文件、组织项目结构的作用。

不过,由于允许包级函数和包级属性的存在,Kotlin 包的内容更加丰富,不像 Java 包只包含类和接口。

与 Java 源文件相同,Kotlin 源文件至多有一个 package 语句,必须放在第一行(除注解外),多个文件层次间使用点号分隔:

package foo.bar
  • 1

此外,Kotlin 的 package 语句前可以有注解,这些注解不是针对 package 语句的,而是针对整个 Kotlin 源文件的,要在注解前加上 @file: 标识符。主要有两个:
@kotlin.jvm.JvmName(val name: String):
这个注解可以用来修饰文件和函数,用来指定目标元素编译后的名称。对于一个 Kotlin 源文件来说 ,使用这个注解可以指定以 Kt 结尾的“文件类”的名称。
@kotlin.jvm.JvmMultiFileClass:
这个注解只能用来修饰文件,用来告诉 Kotlin 编译器:这个文件里定义的包级函数和包级属性,都只是一个 class 文件的一部分,这个 class 文件还有一部分定义在其他文件里。这个注释一般与上面的 JvmName 配合使用:

// kotlin.util.Synchronized.kt
@file:kotlin.jvm.JvmMultiFileClass
@file:kotlin.jvm.JvmName("StandardKt")
package kotlin
inline fun <R> synchronized(lock: Any, block: () -> R): R {/*...*/}
  • 1
  • 2
  • 3
  • 4
  • 5

Synchronized.kt 文件用这两个注解表示这里的 synchronized() 函数应该包含在 StandardKt.class 文件里,这个 class 的另一部分在 Standard.kt 文件里。

import 语句

上面我们说到,Kotlin 包内的元素比 Java 包更为丰富,除类和接口外,还有函数和属性。因此 Kotlin 的 import 语句除了可以导入类和接口外,还可以导入包级函数和包级属性。

与 Java 相同,Kotlin 允许在 import 语句的最后用一个星号 * 来导入一个 Kotlin 或 Java 包内的所有元素。

Kotlin 不允许导入的元素重名,一旦出现重名,就需要用 as 自定义导入名称:

import foo.a.Bar
import foo.b.Bar as BBar
  • 1
  • 2

我们这里导入了两个不同包下的 Bar 类,如果不使用 as 重新定义导入名称,就会出现编译错误。这里我们将 foo.b.Bar 导入为 BBar,我们在这个文件里调用 foo.b.Bar 类时就要用 BBar 的名称,调用 foo.a.Bar 时仍然用 Bar 的名称。

包级函数和包级属性的导入使用 import 包名.函数名 / 属性名 的形式,并不需要写出文件名。

// test.Test.kt
fun sayHello() = println("Hello")
val a = 10
  • 1
  • 2
  • 3

Kotlin 文件的导入方式如下:

import test.Test.sayHello
import test.Test.a
  • 1
  • 2

Java 文件的导入方式如下:

import test.TestKt;

TestKt.sayHello();
System.out.println(TestKt.a)
  • 1
  • 2
  • 3
  • 4

或者用 import static 静态导入:

import static test.TestKt.sayHello;
import static test.TestKy.a;

sayHello();
System.out.println(a);
  • 1
  • 2
  • 3
  • 4
  • 5

需要注意,Kotlin 没有 Java 中的 import static 用法,如果需要导入一个 Java 类的静态方法,可以用 import Java 类.静态方法 的形式;如果导入一个 Kotlin 类在伴生对象里定义的静态方法,可以用 import Kotlin 类.Companion.静态方法 的形式:

// Test.kt
package test
class TestKotlin {
    companion object {
        fun printWorld() = println("World")
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
// Test.java
package test;
public class TestJava {
    public static void printHello() {
        System.out.println("Hello");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可以这样导入这两个静态方法:

import test.TestKotlin.Companion.printWorld
import test.TestJava.printHello

fun main(vararg args: String) {
  printHello()
  printWorld()
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Kotlin 默认导入以下的包:

Kotlin 包

kotlin.、kotlin.annotation.、kotlin.collections.、kotlin.comparisons.、kotlin.io.、kotlin.ranges.、kotlin.sequences.、kotlin.text.

JVM 平台:

java.lang.、kotlin.jvm.

JavaScript 平台:

kotlin.js.*

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/277402
推荐阅读
相关标签
  

闽ICP备14008679号