Skip to content

Is there a way to reference the Java class for a Kotlin top-level function?

I want to load a resource in a top level function using Class.getResourceAsStream().

Is there any way to get a reference to the class that the top level function will be compiled into so that I can write, for example

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

Answer

Another way I found is to declare a local class or an anonymous object inside a top level function and to get its enclosingClass:

val topLevelClass = object{}.javaClass.enclosingClass

Note: to work, this declaration should be placed on top level or inside a top-level function.

Then you can use the topLevelClass as a Class<out Any>:

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