前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin 包和 import 语句使用

Kotlin 包和 import 语句使用

作者头像
xiangzhihong
发布2018-02-06 19:52:48
1.7K0
发布2018-02-06 19:52:48
举报
文章被收录于专栏:向治洪向治洪

Kotlin 包和 package 语句

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

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

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

代码语言:javascript
复制
package foo.bar

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

代码语言:javascript
复制
// kotlin.util.Synchronized.kt
@file:kotlin.jvm.JvmMultiFileClass
@file:kotlin.jvm.JvmName("StandardKt")
package kotlin
inline fun <R> synchronized(lock: Any, block: () -> R): R {/*...*/}

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

import 语句

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

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

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

代码语言:javascript
复制
import foo.a.Bar
import foo.b.Bar as BBar

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

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

代码语言:javascript
复制
// test.Test.kt
fun sayHello() = println("Hello")
val a = 10

Kotlin 文件的导入方式如下:

代码语言:javascript
复制
import test.Test.sayHello
import test.Test.a

Java 文件的导入方式如下:

代码语言:javascript
复制
import test.TestKt;

TestKt.sayHello();
System.out.println(TestKt.a)

或者用 import static 静态导入:

代码语言:javascript
复制
import static test.TestKt.sayHello;
import static test.TestKy.a;

sayHello();
System.out.println(a);

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

代码语言:javascript
复制
// Test.kt
package test
class TestKotlin {
    companion object {
        fun printWorld() = println("World")
    }
}
代码语言:javascript
复制
// Test.java
package test;
public class TestJava {
    public static void printHello() {
        System.out.println("Hello");
    }
}

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

代码语言:javascript
复制
import test.TestKotlin.Companion.printWorld
import test.TestJava.printHello

fun main(vararg args: String) {
  printHello()
  printWorld()
}

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.*

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kotlin 包和 package 语句
  • import 语句
    • Kotlin 包
      • JVM 平台:
        • JavaScript 平台:
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com