2013-04-12 3 views
5

사례 클래스 동반자 개체 t에 대한 참조와 매개 변수 시퀀스 seq이 있으면 사례 클래스의 새 인스턴스를 어떻게 호출 할 수 있습니까?동적으로 스칼라에서 사례 클래스의 새 인스턴스 만들기

매개 변수 번호를 직접 입력 할 때 클래스를 만들 수 있습니다. 내가 해결할 수

scala> case class B(n:String,a:Int,b:Int) 
defined class B 

scala> val t:AnyRef = B 
t: AnyRef = B 

scala> val m = t.getClass.getMethods.filter{m => m.getName == "apply"}. 
    filterNot {_.getReturnType.getName == "java.lang.Object"}(0) 
m: java.lang.reflect.Method = public B B$.apply(java.lang.String,int,int) 

scala> m.invoke(t,"name",1:java.lang.Integer,2:java.lang.Integer) 
res99: Object = B(name,1,2) 

문제는 Seq("name",1:java.lang.Integer,2:java.lang.Integer) 같은 인수의 순서로 호출 호출하는 것입니다. 도움이되는 방법은 크게 감사하겠습니다.

저는 scala 2.10.0을 사용합니다.

+3

그냥 말 ** 어떤 **에'Any','AnyVal','AnyRef','지도를 적어 없습니다하는 데 도움이 때로는

method.invoke(t,seq: _*) 

의 [문자열을, 어떤] Scala에는 풍부하고 강력한 정적 유형 시스템이 있습니다. 프로그램을 피하기보다는 프로그램을 개발하여 악용하도록하십시오. –

+2

몇 가지 매우 정교한 DSL 구조를 사용합니다. 가끔은 황무지로 가야합니다 ;-) – leo

답변

관련 문제