有没有一种方法可以引用Kotlin顶级函数的Java类?

有没有一种方法可以引用Kotlin顶级函数的Java类?,java,kotlin,Java,Kotlin,我想使用Class.getResourceAsStream()在顶级函数中加载资源 例如,有没有办法获取顶级函数将编译成的类的引用,以便我可以编写 val myThing = readFromStream(MYCLASS.getResourceAsStream(...)) 不,没有引用该类的语法。您可以使用Class.forName()访问它。例如,如果该文件名为“Hello.kt”,并且位于包“demo”中,则可以通过调用class.forName(“demo.HelloKt”)来获取该类。

我想使用
Class.getResourceAsStream()
在顶级函数中加载资源

例如,有没有办法获取顶级函数将编译成的类的引用,以便我可以编写

val myThing = readFromStream(MYCLASS.getResourceAsStream(...))

不,没有引用该类的语法。您可以使用Class.forName()访问它。例如,如果该文件名为“Hello.kt”,并且位于包“demo”中,则可以通过调用
class.forName(“demo.HelloKt”)
来获取该类。由于没有直接获取引用的方法,我只好在当前包中创建匿名对象

val myThing = object: Any() {}.javaClass.getResourceAsStream(...)
正如linter所希望的那样,将匿名类标记为
EmptyClassBlock
,您也可以使用

internal object Resources

fun resourceStream(name: String): InputStream {
    return Resources.javaClass.getResourceAsStream(name)
}

我发现的另一种方法是在顶级函数中声明一个本地类或匿名对象,并获取其
封闭类

val topLevelClass = object : Any() {}.javaClass.enclosingClass
注意:若要工作,此声明应放在顶级或顶级函数中

然后您可以将
topLevelClass
用作

val topLevelClass = object : Any() {}.javaClass.enclosingClass
fun main(args:Array){
println(topLevelClass)//类MyFileNameKt
}

使用Java 7,您可以使用

MethodHandles.lookup().lookupClass()

这比只获取匿名对象的类有什么好处吗?关于加载资源,没有。但这实际上是获得顶级类反射的方法,除了资源之外,还需要顶级类反射。您可以从Kotlin调用Java。这就是为什么我提到了顶级(Kotlin)函数,这就是这个问题的主题。是的,你是对的。不幸的是,除非进行了编辑,否则我不会对其进行升级。升级。匿名对象方法似乎是一种黑客。