2016-01-22 37 views

回答

5

我發現另一種方式是聲明一個頂級函數內部局部類或匿名對象,並獲得其enclosingClass

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

注意:要工作,該聲明應放置在頂層或頂層函數中。

然後你就可以使用topLevelClassClass<out Any>

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

頂級功能獲取到當前的Java類的引用是否有任何這只是獲得匿名對象的類的優點嗎? –

+1

關於加載資源,不,沒有。但這實際上是獲得最高級別的反思的方式,除了資源之外,哪一個可能需要。 – hotkey

10

沒有,沒有語法來引用類。你可以使用Class.forName()來訪問它。例如,如果該文件被稱爲「Hello.kt」並且位於包「demo」中,則可以通過調用Class.forName("demo.HelloKt")來獲得該類。

5

在沒有的辦法直接獲取一個參考,我已經回落在當前包中創建一個匿名對象

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

由於棉短絨像detekt會標誌匿名類爲EmptyClassBlock,你也可以使用類似

internal object Resources 

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

使用Java 7,您可以使用

MethodHandles.lookup().lookupClass() 
+0

這是一個關於Kotlin的問題 –

+0

這是有效的Kotlin代碼。你可以從Kotlin調用Java。這就是爲什麼我提到頂級(Kotlin)函數是這個問題的關鍵。 – hunterwb

+0

是的,你是對的。不幸的是,除非進行編輯,否則SO不會讓我高興。 –

相關問題