我想使用顶层函数加载资源Class.getResourceAsStream().
有没有办法获得对顶层函数将被编译成的类的引用,以便我可以编写,例如
val myThing = readFromStream(MYCLASS.getResourceAsStream(...))
Run Code Online (Sandbox Code Playgroud)
小智 11
使用 Java 7,您可以使用从顶级函数中获取对当前 Java 类的引用
MethodHandles.lookup().lookupClass()
Run Code Online (Sandbox Code Playgroud)
yol*_*ole 10
不,没有语法可以引用该类.您可以使用Class.forName()访问它.例如,如果文件名为"Hello.kt"并且位于包"demo"中,则可以通过调用获取该类Class.forName("demo.HelloKt").
我发现的另一种方法是在顶级函数中声明一个本地类或一个匿名对象并获取它enclosingClass:
val topLevelClass = object : Any() {}.javaClass.enclosingClass
Run Code Online (Sandbox Code Playgroud)
注意:要工作,此声明应放在顶层或顶层函数内.
然后你可以topLevelClass用作Class<out Any>:
fun main(args: Array<String>) {
println(topLevelClass) // class MyFileNameKt
}
Run Code Online (Sandbox Code Playgroud)
在没有直接获取引用的方法的情况下,我已经在当前包中创建了一个匿名对象
val myThing = object: Any() {}.javaClass.getResourceAsStream(...)
Run Code Online (Sandbox Code Playgroud)