2017-06-24 7 views
2

このインタフェースのインスタンスをGroovyで入手したいと思います。KotlinDecompilerServicehttps://github.com/JetBrains/kotlin/blob/master/idea/src/org/jetbrains/kotlin/idea/internal/KotlinDecompilerService.ktGroovyでKotlinコンパニオンオブジェクトにアクセスする際の問題?

私が試してみてください。

final KotlinDecompilerService decompilerService = 
KotlinDecompilerService.Companion.getInstance() 

しかし、GroovyのKotlinDecompilerService.Companionjava.lang.Classインスタンスを返します。 (静的フィールドとクラスが同じ名前Companionを持っている)

2017-06-24 23:31:59,066 [9849885] ERROR - llij.ide.plugins.PluginManager - Cannot cast object 'class org.jetbrains.kotlin.idea.internal.KotlinDecompilerService$Companion' with class 'java.lang.Class' to class 'org.jetbrains.kotlin.idea.internal.KotlinDecompilerService$Companion' 
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'class org.jetbrains.kotlin.idea.internal.KotlinDecompilerService$Companion' with class 'java.lang.Class' to class 'org.jetbrains.kotlin.idea.internal.KotlinDecompilerService$Companion' 
    at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:405) 
    at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:319) 
    at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:232) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:603) 

私はインスタンスを取得するためにリフレクションを使用する必要があります。

final KotlinDecompilerService decompilerService = 
KotlinDecompilerService.Companion.newInstance().getInstance() 

これは機能しますが、より良い方法があるかどうかは疑問です。

答えて

1

メンバーフィールドに直接アクセスできるのは@です。これは、groovyのインスタンスではなくクラスを参照するためです。たとえば:

def decompilerService = [email protected] 
+0

答えていただきありがとうございますが、動作しません。たぶんJavaで、これは動作します。しかしGroovyは違う。 – aristotll

+0

これは、Groovyからコンパニオン・オブジェクトにアクセスできる唯一の方法です。私の場合、エラーは 'groovy.lang.MissingMethodException:メソッドのシグネチャがありません:Foo()は引数型に適用できます –

関連する問題