2017-12-04 11 views
0

ジェネリッククラスを取り込む関数をセットアップしようとしています。ジェネリッククラスは、リフレクションによってそのクラス内のメソッドを呼び出します。コードはコンパイルの下には、私はそれを実行すると、しかし、私はこのエラーを取得する:リフレクションによるジェネリッククラスの呼び出しメソッド

java.lang.IllegalArgumentException: Callable expects 2 arguments, but 1 were provided. 

方法は一つだけを取るのに、なぜKotlinは、2つの引数がなければならないと主張しますか?議論は何をすべきか?

import kotlin.reflect.full.memberFunctions 


class myClass { 
    fun test(d: String) : String { 
     return d 
    } 
} 

class test { 

    fun <T: Any>ProcessStuff(
     d : T 
    ) { 
     val myClass = d.let { it::class } 

     var f3 = myClass.memberFunctions.find { it.name == "test"}!! 
     println (f3.call ("Hello World")) 
    } 
} 

fun main(args : Array<String>) { 
    val c = myClass() 
    val t = test() 
    t.ProcessStuff(c) 
} 
+0

このコードスニペットは少しでもコンパイルされません。あなたはいくつかの有効なコードを投稿できますか? –

+0

intelliJで動作するスタンドアローンのHello Worldスニペットに変更されても、元のエラーはそのままです。もともと少し抽象的だったかもしれません、ごめんなさい。 – aggaton

答えて

2

インスタンス(最初の引数)ではメソッドを呼び出していません。

val myClassInstance = myClass() 
println(f3.call(myClassInstance, "Hello World")) 
+2

この場合、インスタンスは 'd'です。 –

関連する問題