복붙노트

[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. ==============================

    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. ==============================

    2.스칼라에서 classOf [계정] 자바 Account.class에 해당합니다.

    스칼라에서 classOf [계정] 자바 Account.class에 해당합니다.

  3. from https://stackoverflow.com/questions/1135248/scala-equivalent-of-java-java-lang-classt-object by cc-by-sa and MIT license