Kotlin 中的 顶层方法 是指 没有定义在任何类中的方法。
新建一个 Kotlin 文件,文件类型选择 File ,新建之后,这个文件中的所有方法都是顶层方法。
纳尼?好像不科学。 注意,新建的 Kotlin 文件不是类,所以它里面的方法都是顶层方法。
创建顶层方法
新建了 TopTest.kt ,内容如下
package com.cosmos.helloworld.ktfile
fun main() {
}
fun testTop(){
println("testTop")
}
那么,这个文件中的方法都是顶层方法。
在 Kotlin 中调用
在 Kotlin 中可以直接调用顶层方法,
不用包名类名,(你不是 import 了吗?点进去是直达 testTop 方法的,所以是不用包名类名)
也不用创建实例。
如直接在 MainActivity 中调用。
import com.cosmos.helloworld.ktfile.testTop
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
testTop()
}
}
在 Kotlin 文件中调用也一样,
fun main(){
testTop()
}
在 Java 中调用
在 Java 中也可以直接调用顶层方法,写法类似调用静态方法的方式,示例,
package com.cosmos.helloworld;
import com.cosmos.helloworld.ktfile.TopTestKt;
public class JavaTest {
public static void main(String[] args) {
JavaTest javaTest = new JavaTest();
javaTest.test();
}
public void test(){
TopTestKt.testTop(); //这里
}
}
Java 中没有顶层方法的概念,方法必须定义在类中。所以不能是 Kotlin 的写法。
刚才创建了 TopTest.kt 文件,编译器会自动创建一个 TopTestKt 的 Java 类,testTop 方法就定义在 TopTestKt 的 Java 类中。
所以,Java 中就这样写了,
TopTestKt.testTop();
测试时还碰到个问题,运行提示 SourceSet with name ‘main‘ not found
,
* What went wrong:
A problem occurred configuring project ':app'.
> Could not create task ':app:JavaTest.main()'.
> SourceSet with name 'main' not found.
修改 .idea/gradle.xml ,添加 <option name="delegatedBuild" value="false" />
,
同步一下,运行OK。