当前位置: 代码迷 >> 综合 >> Kotlin专题「九」:包与导入(Packages and Imports)
  详细解决方案

Kotlin专题「九」:包与导入(Packages and Imports)

热度:33   发布时间:2024-02-10 04:42:36.0

前言:一剪薄弱的光,也要骄傲地捧出辉煌。

一、概述

??Kotlin 中的导包也是一门学问,刚从 Java 转 Kotlin 的时候经常导错包或者不知道怎么导适合的包,这里来为大家讲解下 Kotlin 的导包规则。(另外,Kotlin专题的文章会持续更新下去,目前只是更新了一小部分,后面就抓紧时间将剩下的奉上给大家。学习的越深入越会被 Kotlin 简洁的代码以及良好的代码阅读性深深的被折服,当然在学习过程会难免会枯燥乏味,也会遇到困难,这也是提现了每个人的毅力与意志,对知识的渴望,一起共勉!)

二、包与导入

2.1 包(Packages)

Kotlin 源文件第一行代码一般都是包的声明开始:

package com.suming.kotlindemo.blogfun getListData(){}
class ImportsPackagesActivity : AppCompatActivity() {//TODO
}

源文件的所有内容(例如类和函数)都包含在声明的包内。所以,上面的例子中,函数getListData()的全名是com.suming.kotlindemo.blog.getListData();同理,类ImportsPackagesActivity的全称是com.suming.kotlindemo.blog.ImportsPackagesActivity

注意:如果未指定包名,则该文件的内容属于没有名称的默认包。

2.2 默认导入

默认情况下,许多包被导入到每个 Kotlin 文件中:

  • — kotlin.* :?????????? 核心函数和类型,在所有支持的平台上都可用;
  • — kotlin.annotation.*: ????? 库对 Kotlin 注解工具的支持;
  • — kotlin.collections.*: ????? 集合类型,如迭代,集合,列表,影射以及相关的顶级和拓展函数;
  • — kotlin.comparisons.* (since 1.1): 用于创建Comparator实例的Helper函数;
  • — kotlin.io.*: ????????? IO API,用于处理文件和流;
  • — kotlin.ranges.*: ??????? 范围,进展和相关的顶层和拓展功能;
  • — kotlin.sequences.*: ????? 表示延迟求值集合的序列类型,用于实例化序列的顶级函数和拓展函数;
  • — kotlin.text.*: ???????? 用于处理文本和正则表达式的函数。

另外,还会根据不同的平台导入其他包:

  • JVM平台默认导入以下包
    — java.lang.*
    — kotlin.jvm.* (特定于 Java 平台的函数和注释)
  • JS平台默认导入以下包
    — kotlin.js.* (特定于JavaScript平台的函数的其他API)

2.3 导入(Imports)

(1)除了默认导入的包外,每个文件可能需要你使用的某些包:

import android.widget.TextView//导入android.widget包下的TextView类class ImportsPackagesActivity : AppCompatActivity() {var textView = TextView(this) //这里需要用到android.widget包下的TextView类,需要在头部文件导入
}

(2)或者范围内所有可访问的内容(包,类,对象等):

import java.util.* //java.util包下的所有类可用
import kotlin.collections.ArrayList //ArrayList是java.util包下的的子包class ImportsPackagesActivity : AppCompatActivity() {var random = Random() //Random类在java.util包下var date = Date(1000) //Date类在java.util包下var list = ArrayList<String>() //ArrayList在kotlin.collections包下
}

导入包java.util.*表示包下的所有类都可以使用了,但是如果java.util.*包下还有其他子包,则需要导入具体子包才可使用子包下的类。

(3)如果包名有名称冲突,我们可以使用 as 关键字本地重命名冲突实体类消除歧义。比如新导入的包名与已存在的包名名字冲突了:

import android.widget.TextView 
import com.suming.kotlindemo.blog.TextView as MyView //MyView 表示com.suming.kotlindemo.blog.TextViewclass ImportsPackagesActivity : AppCompatActivity() {var View = TextView(this) //android.widget.TextView var myView = MyView()	//使用 as 关键字重新定义了com.suming.kotlindemo.blog.TextView,这里使用 MyView }
}

上面的 android.widget.TextViewcom.suming.kotlindemo.blog.TextView 包名重名了,编译器会报错的,使用 as 关键字类重写命名,使用的时候以新命名的名字为准。

(4)import关键字不限于导入类,也可以用来导入其他声明:

  • 顶级top-level函数和属性;
  • 对象函数声明的函数和属性;
  • 枚举常量。

至此,本文结束!


源码地址:https://github.com/FollowExcellence/KotlinDemo-master

请尊重原创者版权,转载请标明出处:https://blog.csdn.net/m0_37796683/article/details/107957844 谢谢!

  相关解决方案