有没有办法为 Kotlin 顶级函数引用 Java 类?

2022-09-01 22:03:23

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

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

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

答案 1

我发现的另一种方法是在顶级函数中声明一个本地类或一个匿名对象,并得到它的:enclosingClass

val topLevelClass = object{}.javaClass.enclosingClass

注意:要工作,此声明应放在顶级或顶级函数内。

然后,您可以将 用作:topLevelClassClass<out Any>

fun main(args: Array<String>) {
    println(topLevelClass) // class MyFileNameKt
}

答案 2

在 Java 7 中,您可以使用以下方法从顶级函数获取对当前 Java 类的引用:

MethodHandles.lookup().lookupClass()

推荐