[SCALA] 형식 매개 변수에 대한 스칼라 classOf
SCALA형식 매개 변수에 대한 스칼라 classOf
나는 스칼라 / 자바를 사용하여 객체 업데이트에 대한 일반적인 방법을 만들기 위해 노력하고 있지만 형식 매개 변수에 대한 클래스를 얻을 수 없습니다.
여기 내 코드는 다음과 같습니다
object WorkUnitController extends Controller {
def updateObject[T](toUpdate: T, body: JsonObject){
val source = gson.fromJson(body, classOf[T]);
...
}
}
내가 오류입니다
나는 당신이 그것을 할 수 없습니다 자바 알고 있지만 전혀 스칼라이 가능하다?
감사!
해결법
-
==============================
1.때문에 매니페스트 (스칼라 2.10.0 이후)이 업데이트 된 대답은되지 않습니다 -
때문에 매니페스트 (스칼라 2.10.0 이후)이 업데이트 된 대답은되지 않습니다 -
import scala.reflect.ClassTag import scala.reflect._ object WorkUnitController extends Controller { def updateObject[T: ClassTag](toUpdate: T, body: JsonObject){ val source = gson.fromJson(body, classTag[T].runtimeClass) ??? } }
당신은 ClassTag 대신 ClassManifest를 사용한다 및 .runtimeClass 대신 .erasure의
원래 대답 - 예, 당신은 사용하여 매니페스트를 수행 할 수 있습니다
object WorkUnitController extends Controller { def updateObject[T: ClassManifest](toUpdate: T, body: JsonObject){ val source = gson.fromJson(body, classManifest[T].erasure); ... } }
-
==============================
2.바실의 맥심의 대답은 나를 도왔다.
바실의 맥심의 대답은 나를 도왔다.
개인적으로, 나는 그런 매개 변수를 (추가하는 데 사용되는 암시 적 구문을 선호하는 선물 : ClassTag 그것을 위해 속기 그래서 여기, 경우 다른 사람도 더 좋은 방법이를보고있다. :
import scala.reflect.ClassTag object WorkUnitController extends Controller { def updateObject[T](toUpdate: T, body: JsonObject)(implicit tag: ClassTag[T]){ val source = gson.fromJson(body, tag.runtimeClass) ??? } }
면책 조항 : 나는 위의 컴파일하지 못했지만, 내 자신의 유사한 코드는이 방식으로 작동합니다.
from https://stackoverflow.com/questions/6200253/scala-classof-for-type-parameter by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라에서 예외를 던지는 무슨 일이 "공식적인 규칙"입니다 (0) | 2019.11.14 |
---|---|
[SCALA] 요소의 고정 된 수의 여러 목록으로 분할 목록 (0) | 2019.11.14 |
[SCALA] 우분투 설치 SBT [폐쇄] (0) | 2019.11.14 |
[SCALA] 어떻게 두 개의 필드로 스칼라의 목록을 정렬하려면? (0) | 2019.11.14 |
[SCALA] 스칼라리스트를 java.util.List를 변환하는 방법 (0) | 2019.11.14 |