1. 程式人生 > >package、import及as等關鍵字

package、import及as等關鍵字

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 完美的解決了導包衝突的問題