2013-05-06 2 views
2

은 내가 T로 사용하고자하는스칼라 얻기 클래스 유형은

val cls = Class.forName("clsName") 
def fromJson[T: Manifest](me: String): T = { 
Extraction.extract[T](net.liftweb.json.parse(me)) 
} 

클래스 이름의 캐릭터 라인 표현을이 시도했습니다

val t = Manifest.classType(cls) 
JsonConverter.fromJson[t](stringData) // compile error 

그것에 가장 좋은 방법은 무엇입니까? 리플렉션 사용을 피하는 방법이 있습니까?

답변

5

당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :이 방법

val cls = Class.forName(myClassName) 
val m = Manifest.classType(cls) 
val myObj:Any = JsonConverter.fromJson(stringData)(m) 

한 뉘앙스 당신이 명시 적으로 어떤으로 객체를 입력해야한다는 것입니다. 이는 컴파일 타임으로 클래스를 가지고 있지 않으며 classType에 대한 호출에 유형 매개 변수가 제공되지 않아 Manifest이 반환 된 경우 Manifest[Nothing]이기 때문입니다. 이상적은 아니지만 작동합니다.

+0

몇 가지 업데이트를했습니다. – cmbaxter

관련 문제