[SCALA] 자바의 java.lang.Class <T> 객체의 스칼라 동등한
SCALA자바의 java.lang.Class 객체의 스칼라 동등한
문제는 가장 좋은 예에 의해 설명된다 :
JPA의 EntityManager를위한 자바에서 나는 다음과 같은 작업을 수행 할 수 있습니다 (계정 내 엔티티 클래스) :
Account result = manager.find(Account.class, primaryKey);
스칼라에서, 내 순진 시도는 다음과 같습니다
val result = manager.find(Account.class, primaryKey)
내가 스칼라에서 Account.class를 사용하려고하면,이를 좋아하지 않을 것 같다. 어떻게 스칼라의 계정 클래스의 java.lang.Class 오브젝트를 지정할 수 있습니다?
해결법
-
==============================
1."스칼라 형식 시스템"에 따르면,
"스칼라 형식 시스템"에 따르면,
val c = new C val clazz = c.getClass // method from java.lang.Object val clazz2 = classOf[C] // Scala method: classOf[C] ~ C.class val methods = clazz.getMethods // method from java.lang.Class<T>
그러나 classOf [T] 및 getClass는 getClass의 경우에, JVM에 입력 소거의 영향을 반영하는 약간 다른 값을 반환한다.
scala> classOf[C] res0: java.lang.Class[C] = class C scala> c.getClass res1: java.lang.Class[_] = class C
다음은 작동하지 않습니다 이유입니다 :
val xClass: Class[X] = new X().getClass //it returns Class[_], nor Class[X] val integerClass: Class[Integer] = new Integer(5).getClass //similar error
getClass의 반환 형식에 대한 티켓이있다.
(제임스 무어는 티켓이 즉 11 월 2011 년 2 년 후, 고정, "지금"이라고보고합니다. 2.9.1에서 getClass 지금 수행합니다
scala> "foo".getClass res0: java.lang.Class[_ <: java.lang.String] = class java.lang.String
)
돌아 가기 2009 년 :
참고 : 모두 getClass에 관한 것은, 가능한 해결 방법은 다음과 같습니다
class NiceObject[T <: AnyRef](x : T) { def niceClass : Class[_ <: T] = x.getClass.asInstanceOf[Class[T]] } implicit def toNiceObject[T <: AnyRef](x : T) = new NiceObject(x) scala> "Hello world".niceClass res11: java.lang.Class[_ <: java.lang.String] = class java.lang.String
-
==============================
2.스칼라에서 classOf [계정] 자바 Account.class에 해당합니다.
스칼라에서 classOf [계정] 자바 Account.class에 해당합니다.
from https://stackoverflow.com/questions/1135248/scala-equivalent-of-java-java-lang-classt-object by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 스파크 SQL의 사용자 정의 유형에 대한 스키마를 정의? (0) | 2019.10.30 |
---|---|
[SCALA] 스칼라로 돌아 가기 (0) | 2019.10.30 |
[SCALA] 왜 "메소드 오버로딩을 피하기?" (0) | 2019.10.30 |
[SCALA] 스칼라에서 JavaConverters과 JavaConversions의 차이점은 무엇입니까? (0) | 2019.10.30 |
[SCALA] 스칼라 스파크 : DataFrame에 Dataframe [벡터] 변환 방법 [F1 : 더블, ..., FN : 더블)] (0) | 2019.10.30 |