今天我们学习Kotlin的目录和包。
前面我们了解了Kotlin的类和属性,但是我们都只是写了很少的代码,当代码量增加时,我们就需要一定的方法来组织和分类存放我们的代码,以便于整个项目的维护,如果我们将所有的代码都写在一个kt文件中是不行的。一旦我们开始写出多个kt文件,就涉及到多个文件和类之间的互相调用,这就是我们这一节讨论的Kotlin的目录和包。
Java中的目录和包
我们先说一下Java中的目录和包的规则。
1 . Java中的public类必须和文件名相同
2 . Java中使用package
关键字类声明一个包
3 . Java中声明包是目录名之间使用.
来分割
4 . Java中声明的包结构必须与目录结构向对应
下面给一个示例
package cn.codekong;
public class Main {
public static void main(String[] args) {
System.out.println("我是Java类");
}
}
下面是项目的目录结构
Kotlin中的目录和包
可能有人会说上面是Java的基础知识,没必要说,但你有没有发现我们前面学习Kotlin的过程中一直都是和Java对比学习的,这样我们就可以只需要关注两者不一样的东西即可。
下面说说Kotlin中目录和包的规则。
1 . Kotlin中一个kt文件中可以放多个public的类(Kotlin默认的访问权限就是public,所以可以省略)
2 . Kotlin中同样使用package
关键字声明一个包
3 . Kotlin中的包声明目录名之间同样使用.
来分割
4 . Kotlin中的包声明不需要与目录结构对应
尤其是第四点,目录结构可以不与包结构对应,Kotlin的包声明更像是命名空间
,只是让多个类之间不会有冲突,并不关心实际在磁盘上的组织存储方式。
下面同样是一个示例
package cn.codekon.kt
class Main2(val name: String){
}
fun main(args: Array<String>){
println("我是Kotlin类的")
}
下面是项目的目录结构
你会发现我包声明和目录结构是不同的,但这仍然是合法的,可以正常编译和使用。
Java与Kotlin的互操作
既然Kotlin和Java都有包的概念,那怎么互相导入类互相操作呢,其实这个和Java中的规则是一样的。
下面只贴一下上面类中Java如何使用Kotlin中的代码
package cn.codekong;
import cn.codekon.kt.Main2;
public class Main {
public static void main(String[] args) {
System.out.println("我是Java类");
Main2 main2 = new Main2("kotlin");
}
}
请注意,因为Kotlin中的包声明没有遵循目录结构,所以当我们使用Kotlin的类时,就按Kotlin中声明的包结构进行import
,就可以正常使用了。
写在最后
尽管Kotlin的包声明不遵循目录结构,但我们还是应该要求自己尽量将Kotlin的包声明与文件目录结构相对应,这样可以减少很多莫名的错误,在Kotlin与Java混编的项目中也会少很多麻烦。