包
一個源文件以包聲明開始:
packagefoo.barfunbza() {}classGoo{}//...
源文件的所有內(nèi)容(比如類和函數(shù))都被包聲明包括。因此在上面的例子中,bza()的全名應該是foo.bar.bza,Goo的全名是foo.bar.Goo。
如果沒有指定包名,那這個文件的內(nèi)容就從屬于沒有名字的 "default" 包。
許多包被默認導入到每個Kotlin文件中:
-- kotlin.*
-- kotlin.annotation.*
-- kotlin.collections.*
-- kotlin.comparisons.* (since 1.1)
-- kotlin.io.*
-- kotlin.ranges.*
-- kotlin.sequences.*
-- kotlin.text.*
一些增強包會根據(jù)平臺來決定是否默認導入:
-- JVM:
---- java.lang.*
---- kotlin.jvm.*
-- JS:
---- kotlin.js.*
除了模塊中默認導入的包,每個文件都可以有它自己的導入指令。導入語法的聲明在grammar中描述。
我們可以導入一個單獨的名字,比如下面這樣:
importfoo.Bar//Bar 現(xiàn)在可以不用條件就可以使用
或者范圍內(nèi)的所有可用的內(nèi)容 (包,類,對象,等等):
importfoo.*//foo 中的所有都可以使用
如果命名有沖突,我們可以使用as關(guān)鍵字局部重命名解決沖突
importfoo.Bar//Bar 可以使用importbar.BarasbBar//bBar 代表 'bar.Bar'
import關(guān)鍵字不局限于導入類;您也可以使用它來導入其他聲明:
-- 頂級函數(shù)與屬性
-- 在對象聲明中聲明的函數(shù)和屬性
--枚舉常量
如果最頂?shù)穆暶鳂俗?private , 那么它是自己對應包私有 (參看Visibility Modifiers)。如果包內(nèi)有私有的屬性或方法,那它對所有的子包是可見的。
注意包外的的成員是默認不導入的,比如在導入foo.bar后我們不能獲得foo的成員