有没有办法引用Kotlin顶级函数的Java类?
我想使用Class.getResourceAsStream()
来加载顶级函数中的资源。
例如,有没有什么办法可以获得对顶级函数进行编译的类的引用,以便我可以编写它
val myThing = readFromStream(MYCLASS.getResourceAsStream(...))
我发现的另一种方法是在顶层函数中声明一个本地类或一个匿名对象,并获得它的enclosingClass
:
val topLevelClass = object : Any() {}.javaClass.enclosingClass
注意:要工作,这个声明应该放在顶层或顶层函数中。
那么你可以使用topLevelClass
作为一个Class<out Any>
:
fun main(args: Array<String>) { println(topLevelClass) // class MyFileNameKt }
不,没有引用该类的语法。 你可以使用Class.forName()来访问它。 例如,如果文件名为“Hello.kt”,位于包“demo”中,则可以通过调用Class.forName("demo.HelloKt")
来获取该类。
在没有办法直接获取引用的时候,我已经开始在当前包中创建一个匿名对象
val myThing = object: Any() {}.javaClass.getResourceAsStream(...)
因为像detekt这样的linters会将匿名类标记为EmptyClassBlock
你也可以使用类似的东西
internal object Resources fun resourceStream(name: String): InputStream { return Resources.javaClass.getResourceAsStream(name) }
使用Java 7,您可以使用顶级函数获取对当前Java类的引用
MethodHandles.lookup().lookupClass()
- 传递lambda的映射时,得到了NoClassDefFoundError
- 合并Observables列表,并等到所有完成
- 如何在Intellij中使用H2和SQLite中的Kotlin
- 测试类中的java.util.logging.Logger
- Robolectric KeyStoreKeyGenerator
- 使用String name()声明实现Java接口的Kotlin枚举
- 无法使用Gradle在IntelliJ Community Edition中添加应用程序服务器
- 什么是一些好的基于JVM的Web服务器库?
- 是否有可能用Kotlin val(property)重写Java getter(method)?