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(...))
With Java 7 you can get a reference to the current Java class from a top level function using
In the absence of a way to get a reference directly, I've fallen back on creating an anonymous object in the current package
Another way I found is to declare a local class or an anonymous object inside a top level function and to get its
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 aClass<out Any>
:No, there is no syntax to reference that class. You can access it using Class.forName(). For example, if the file is called "Hello.kt" and is located in the package "demo", you can obtain the class by calling
Class.forName("demo.HelloKt")
.As linters like detekt would flag anonymous classes as
EmptyClassBlock
you could also use something like