包级别的函数
所有的函数和属性申明在org.foo.bar包下example.kt,包括扩展函数,会被编译成名叫org.foo.bar.ExampleKt的Java类的的静态方法。
// example.kt
package demo
class Foo
fun bar() {
}
// Java
new demo.Foo();
demo.ExampleKt.bar();
生成的Java类的名字可以使用@JvmName来进行修改:
@file:JvmName("DemoUtils")
package demo
class Foo
fun bar() {
}
// Java
new demo.Foo();
demo.DemoUtils.bar();
如果多个文件有相同的Java类名字(相同的包名、相同的类名或@JvmName值)将是一个错误。然而,编译器可以生成一个Java的外观类,这个外观类有特定的名字,并且包含文件中的所有的申明。为了开启这样的外观类的生成,你可以在所有的文件中使用@JvmMultifileClass注解。
// oldutils.kt
@file:JvmName("Utils")
@file:JvmMultifileClass
package demo
fun foo() {}
// newutils.kt
@file:JvmName("Utils")
@file:JvmMultifileClass
package demo
fun bar() {}
// Java
demo.Utils.foo();
demo.Utils.bar();