기본적으로 Map을 유형 객체별로 인덱싱하고 싶습니다. 이 경우 클래스를 "유형 유형"으로 사용하려고합니다.스칼라에서 유형 객체 컬렉션을 만드는 방법
다음 코드를
class SuperClass {}
val typemap = new HashMap[Class[_ <: SuperClass], SuperClass]
def insertItem1[T <: SuperClass] (item : T) = typemap += classOf[T] -> item
def insertItem2[T <: SuperClass] (item : T) = typemap += item.getClass -> item
(1) classOf [T]를 분명히 잘못 되었기 때문에, 컴파일되지 않습니다 :
error: class type required but T found
(2) item.getClass은 잘못된 유형입니다 :
중 드롭 일 :
Type mismatch, expected: Class[_ <: SuperClass], actual: Class[_]
나는이 작업을 수행하는 두 가지 방법을 참조 전자 형식 요건 만
를 클래스 [_]를 사용하거나
하지만를 (아직 어떤 예 환영 그렇게하는 방법을 잘 모르는) 대신 클래스의 매니페스트 사용보다 일반적으로, 왜 classOf [T] 무효 및 방법 매개 변수화 된 유형에 대한 클래스 객체를 얻으려면 어떻게해야합니까?
업데이트 : 나는 item.getClass.asInstanceOf[Class[T]]
을 사용하여 클래스 개체에 연결할 수 있음을 알았습니다. 하나 들어, 이것은 추한 것입니다. 분명히
def isPresent[T <: SuperClass] = typemap contains classOf[T]
내가 insertItem
에 asInstanceOf 방법을 사용하고 isPresent
에 대한 매개 변수로 클래스를 전달할 수 : 나중에 코드에서 내가 이곳과 같은 기능을 가지고 있기 때문에이 들어, 많은 도움이되지 않습니다. 더 좋은 방법이 있습니까?
왜 종류별로 개체를 저장하고 검색해야합니까? 더 많은 컨텍스트가 주어지면'classOf' 또는'getClass'를 전혀 포함하지 않는 다른 솔루션이 없다는 것이 궁금합니다 ... – huynhjl
나는 이것이 http://stackoverflow.com/questions/7335946의 복제본이라고 생각합니다./class-type-in-scala-map-in-scala – Sohum
usecase는 기본적으로 주어진 유형의 모든 (등록 된) 객체를 가져올 수있는 엔티티 시스템입니다. 따라서 각 유형에 대해 특별한 종류의 키를 정의 할 수 있지만 Class 객체는 해당 키입니다. 제네릭없이 할 수있는, 단순히 클래스 개체를 주위에 키로 전달할 수 및 다음 작동합니다. 그러나 나는 더 좋은 방법이 있다고 생각했다. – matejcik