赞
踩
为了方便管理大型软件系统中数目众多的类,解决类的命名冲突问题,类似于Java,Kotlin同样引入包(package)机制,提供类的多重类名空间。
package语句必须是文件中的第一行非注释的程序代码。
package foo.bar
fun bza() {}
class Goo {}
//...
源文件的所有内容(比如类和函数)都被包声明包括。 因此在上面的例子中,bza() 的全名应该是 foo.bar.baz , Goo 的全名是 foo.bar.Goo 。
如果没有指定包名, 那这个文件的内容就从属于没有名字的 “default” 包。
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 完美的解决了导包冲突的问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。