首页 文章

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

提问于
浏览
17

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

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

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

5 回答

  • 0

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

    val topLevelClass = object : Any() {}.javaClass.enclosingClass
    

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

    然后你可以使用 topLevelClass 作为 Class<out Any>

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

    不,没有语法可以引用该类 . 您可以使用Class.forName()访问它 . 例如,如果文件名为"Hello.kt"且位于包"demo"中,则可以通过调用 Class.forName("demo.HelloKt") 来获取该类 .

  • 9

    在没有直接获取引用的方法的情况下,我已经在当前包中创建了一个匿名对象

    val myThing = object: Any() {}.javaClass.getResourceAsStream(...)
    
  • 3

    使用Java 7,您可以使用顶级函数从当前Java类获取引用

    MethodHandles.lookup().lookupClass()
    
  • 6

    detekt这样的短语会将匿名类标记为 EmptyClassBlock ,你也可以使用类似的东西

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

相关问题