2010-12-07 3 views
3

값이 List[Any]이고 값이 원래 값인 ClassManifest[_]의 목록이 있습니다. 목록에서 일부 값을 원래 형식으로 다시 캐스팅하는 방법은 무엇입니까?스칼라에서 ClassManifest를 사용하는 Any에서 캐스트 값

def cast[T](x: Any, mf: ClassManifest[T]): T = x.asInstanceOf[T]이 작동하지 않습니다.

답장을 보내 주셔서 감사합니다.

+0

귀하의 질문은 매우 유사합니다 : http://stackoverflow.com/questions/1094173/how-do-i-get-around-type-erasure-on-scala-or-why-cant-i-get- the-type-parameter – Nicolas

답변

3

반환 유형이 cast 일 때 항상 T이 제한되는 가장 일반적인 상위 유형으로 간주되므로 정상적으로 작동하지 않습니다. 컴파일시에 더 구체적으로 만들 수있는 방법이 없습니다.

http://jnordenberg.blogspot.com/2008/09/hlist-in-scala-revisited-or-scala.html

+0

Thx, 흥미로운 것 같지만, 지금은 HList가 10 개의 요소로 제한됩니다. – fehu

+0

@fehu : 왜 그렇게 생각하니? HList의 동기 중 하나는 Tuple의 22 요소 제한을 초과하는 임의의 수의 요소를 보유 할 수 있다는 것입니다. –

0

에 자바/스칼라에서 Class 인스턴스를 사용하는 방법 :

당신은 서로 다른 종류의 강력한 형식의 컬렉션을 구축을 위해 노력하는 경우, 그럼 당신이 정말로 원하는 것은 HList입니다 객체 캐스트는 메소드를 사용하는 것입니다. 캐스트 의미가 있도록 (즉, 더 추가 정보를 제공하지 않습니다),

mf.erasure.cast(x) //T 

을하지만 mf.erasureClass[_] (또는 Java에서 Class<?>)이기 때문에이 작동하지 않습니다 : 그래서 당신은 당신이 할 수 있다고 생각할 수 있습니다. 이것은 비유 동화 된 제네릭을 사용할 때 (물론) 단점 중 하나입니다.

관련 문제