package、import及as等關鍵字
阿新 • • 發佈:2019-01-24
package
為了方便管理大型軟體系統中數目眾多的類,解決類的命名衝突問題,類似於Java,Kotlin同樣引入包(package)機制,提供類的多重類名空間。
package語句必須是檔案中的第一行非註釋的程式程式碼。
package foo.bar
fun bza() {}
class Goo {}
//...
原始檔的所有內容(比如類和函式)都被包宣告包括。 因此在上面的例子中,bza() 的全名應該是 foo.bar.baz , Goo 的全名是 foo.bar.Goo 。
如果沒有指定包名, 那這個檔案的內容就從屬於沒有名字的 “default” 包。
import
匯入一個單獨的名字
import foo.Bar //Bar 現在可以不用條件就可以使用
範圍內的所有可用的內容 (包, 類, 物件, 等等):
import foo.*/ /foo 中的所有都可以使用
衝突
如果將兩個含有相同名稱的的類庫以“*”同時匯入,將會存在潛在的衝突。例如
import net.mindview.simple.*
import java.until.*
由於java.util.和net.mindview.simple.都包含Vector類。如果在建立一個Vector類時:
Vecotr v = Vector()
此時,編譯器並不知道呼叫哪個類庫的類,從而會報錯誤資訊。假如需要一個java.until.Vector物件,只能這麼建立
java.until.Vecotr v = java.until.Vector();
這樣完全指明瞭Vector類的位置,除非還需要java.until.中其他的類,否則沒有必要使用java.until.匯入庫。
當然可以使用入一個單獨的名字,即java.until.Vecotr,這樣可以解決。
如果在一個類中,需要同時呼叫java.until.Vecotr 和 net.mindview.simple.Simple物件,該如何解決呢?
此時不得不提,Kotlin中強大的 as關鍵字,此關鍵字用於區域性重新命名,以解決衝突。上面的問題,我們可以這樣解決:
import net.mindview.simple.Vecotr import java.until.Vecotr as aVector val v : Vecotr = Vector() val vA : aVector = aVector()
上述程式碼中的,v是net.mindview.simple.Vecotr物件,而 vA是java.until.Vecotr as aVector物件,as 完美的解決了導包衝突的問題