[scala] String으로 Class method 호출하기. ruby의 send처럼..

Programming/scala 2016.03.23 23:53

스트링 문자를 통해서 해당 문자에 해당하는 클래스를 호출해보자.


나도 잘 모르기때문에 역시나 구글사마의 도움을 받아.. 스택오버플로우를 뒤지기 시작했다.

http://stackoverflow.com/questions/2060395/is-there-any-scala-feature-that-allows-you-to-call-a-method-whose-name-is-stored


2가지 방식으로 호출이 가능한데..

자바의 refliction기법으로 한다면 아래와 같다.


class A {
  def cat(s1: String, s2: String) = s1 + " " + s2
}
val a = new A
val hi = "Hello"
val all = "World"
val method = a.getClass.getMethod("cat",hi.getClass,all.getClass)
method.invoke(a,hi,all)


Scala를 통해서 하고자 한다면..

case class Caller[T>:Null<:AnyRef](klass:T) {
  def call(methodName:String,args:AnyRef*):AnyRef = {
    def argtypes = args.map(_.getClass)
    def method = klass.getClass.getMethod(methodName, argtypes: _*)
    method.invoke(klass,args: _*)
  }
}
implicit def anyref2callable[T>:Null<:AnyRef](klass:T):Caller[T] = new Caller(klass)
a call ("cat","Hi","there")
이러하다..


저작자 표시 비영리 변경 금지
신고


티스토리 툴바