使用Kotlin在子类中执行静态方法编译?
有没有一种方法可以在Kotlin中的现有类中静态编译main()
方法? 我试图让Gradle使用main()
方法构建这个应用程序,但是我没有运气。 我也一直在尝试几个解决方法…
class MyApp: App() { override val primaryView = MyView::class companion object Launcher { @JvmStatic fun main(args: Array<String>): Unit { launch(*args) } } }
在我的Gradle脚本中,我试图指定MyApp
类有一个main()
方法。 它错误了,但是当我打电话run
时找不到类。
mainClassName = 'path.to.application.MyApp'
编辑
我为这个混淆道歉,但是我的问题的一部分可能与子类化有关,而不一定是找到main()
类。
main()
函数需要访问App
定义的launch()
方法。 出于某种原因,关联关键字不允许这样做:/如果这个信息是相关的,我们可以重新考虑downvotes吗?
伴随对象中的静态方法放置在封闭类中。 所以你的情况MyApp
。 无论您如何命名伴随对象,都是如此,在运行该类时不需要以任何方式引用伴随。
因此,您的代码是正确的,假设以下是正确的:
- 你的应用程序插件应用在你的Gradle中
- 您将包含以上代码的包命名为
path.to.application
(您不显示包声明) - 你得到一个
path.to.application.MyApp
没有找到类错误,并匹配#2,(你不显示从Gradle实际的错误) - 您正在运行正确的gradle任务(您正在运行哪个任务?)
- 代码实际上是编译的,看你最新的注释表明你可能有一个编译器错误(
launch()
方法不能从同伴访问),这意味着你不能运行一些尚未编译的东西。
你可以做什么来检查类名是右键单击Intellij IDEA中的main()
方法,然后选择运行/调试选项下方的create path.to.app...
菜单选项,当打开运行时配置对话框可以在那里看到完整的类名。 这应该是在你的Gradle中使用的。 如果您已经有了运行时配置,那么只需在那里查看完整的类名即可。 如果这不起作用,问题就在别处,你需要提供缺少的信息(什么是Gradle任务,什么是实际的错误,这个类的包声明是什么)
有些信息是从这个问题,将有助于缩小这个问题。
这个例子:
package org.test.kotlin class MyApp { companion object Launcher { @JvmStatic fun main(args: Array<String>) { println("hello") } } }
运行类org.test.kotlin.MyApp
时可以正常org.test.kotlin.MyApp
那么这个,没有Launcher
这个词:
package org.test.kotlin class MyApp { companion object { @JvmStatic fun main(args: Array<String>) { println("hello") } } }
而这个意外的工作,但没有做你期望的,但是创建一个嵌套的类,并在那里添加静态和运行使用类org.test.kotlin.MyApp.Launcher
。 如果这是工作,那么问题是没有显示它正在使用的实际主类名称是失败的:
package org.test.kotlin class MyApp { object Launcher { @JvmStatic fun main(args: Array<String>) { println("hello") } } }
关于可能的编译错误(上面#5):在你的代码中你引用了你不显示的launch()
方法,也许它是在祖先类中。 但是你没有创建任何类的实例。 所以这将失败,编译器错误。 将其更改为:
class MyApp: App() { override val primaryView = MyView::class companion object { @JvmStatic fun main(args: Array<String>): Unit { MyApp().launch(*args) } } }
这些其他相关问题也有类似的提示:
- 你的关于如何运行的问题在另一个SO问题中得到了解答: https : //stackoverflow.com/a/26402542/3679676
- 如何从命令行运行Kotlin类?
- 如何在Kotlin中运行编译后的类文件?
- Android Studio 3.0 Canary 1:Gradle同步错误
- Android Studio 3.1 Canary 3上的Gradle同步错误
- android studio 3.0.1和kotlin v1.2.10-release-Studio3.0-1有问题
- 包含gradle脚本kotlin文件的IntelliJ自动完成
- Kotlin胶囊Gradle错误
- 在gradle-kotlin-dsl中的Android产品Flavors
- 在IntelliJ中找到文件,但不是在建立的jar
- Instrumentation测试无法在包含Kotlin文件的Android库模块中运行
- Kotlin Android Project无法同步Gradle项目