Kotlin基本语法之(二)包、修饰符与运算符

771 阅读1分钟

使用package关键字,与Java的包基本一致,稍微有几处区别:

  1. 文件路径和包路径可以不一致(java会报编译错误)。
  2. 属性和方法可以直接声明在包(又叫顶层声明)下,别的包中调用该方法需要导入包路径+方法名。
  3. 没有java中静态导入import static,统一使用import关键字。

修饰符

kotlin提供的修饰符与java类似,也有四种分别为:protected/private/internal/public。

与java不同的是

  1. 缺省情况下情况下视为public。
  2. internal表示模块可见

那什么是“模块”呢,比如在项目中一个Module就是一个模块。 官方的定义为:一个模块是编译在一起的一套Kotlin文件。

  • 一个IntelliJIDEA模块;
  • 一个 Maven 项目;
  • 一个 Gradle 源集(例外是 test 源集可以访问 main 的 internal 声明);
  • 一次 Ant 任务执行所编译的一套文件。

下表对比了Kotlin和Java的修饰符,可以直观的看到他们的区别和联系。

修饰符 Java Kotlin
public 任意可见 同Java
private 本类内部可见 同Java
protected 本类或子类可见 同Java
缺省 包和子包中可见 同public
internal -- 同模块可见

另外,internal关键字有一个bug,当将一个kotlin模块打成java包,并导入在一个非Kotlin编译环境下时,internal失效,与public作用域一样。

运算符

除常规的数学运算符与Java一致外,要关注一下位运算符。

位运算 Java Kotlin
& and
| or
取反 ~ inv
异或 ^ xor
左移 << shl
右移 >> shr
无符号右移 >>> ushr