2017-12-04 14 views
0

리플렉션을 통해 해당 클래스 내의 메서드를 차례로 호출하는 제네릭 클래스를 사용하여 함수를 설정하려고합니다. 코드를 컴파일 아래 내가 그것을 실행할 때, 그러나 나는이 오류가 발생합니다 :리플렉션을 통해 일반 클래스의 메서드 호출

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

방법은 하나를 취한다 때 왜 코 틀린, 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'입니다. –