[SCALA] 스칼라에서 소거를 입력
SCALA스칼라에서 소거를 입력
나는 오히려 여기에 무슨 일이 일어나고 있는지에 대해 혼란스러워하고 있습니다 :
import scala.collection.immutable._
object Main extends App {
sealed trait Node
sealed trait Group
case class Sheet(
val splat: String,
val charname: String,
val children: ListMap[String, Node],
val params0: ListMap[String, Param], //params0 to separate sheet-general parameters
val note: Option[Note]
) extends Node with Group
case class Attributes(val name: String) extends Node with Group
case class Param(val name: String, val value: String) extends Node
case class Note(val note: String) extends Node
나는 대체 기능의 세 가지 버전이 있어요 - 마지막은 다른 사람이 단지 디버깅 실제로 쓰기에 노력하고있어 하나입니다.
class SheetUpdater(s: Sheet) {
def replace1[T <: Group](g: T): Unit = {
s.children.head match {
case (_, _:Sheet) =>
case (_, _:Attributes) =>
}
}
}
이 버전은 그래서 분명히 내가 런타임에 s.children의 유형에 액세스 할 수있는 어떤 경고가 발생하지 않습니다.
class SheetUpdater(s: Sheet) {
def replace2[T <: Group](g: T): Unit = {
g match {
case _:Sheet =>
case _:Attributes =>
}
}
}
나도 그렇게 분명히 g의 유형의 세부 사항은 런타임에 사용할 수 있으며,이 버전을하지 않습니다 ...
class SheetUpdater(s: Sheet) {
def replace3[T <: Group](g: T): Unit = {
s.children.head match {
case (_, _:T) => //!
case (_, _:Attributes) =>
}
}
}
...하지만 그렇다고하더라도, 나에게 그것을 삭제 경고에 의해 제거되기 때문에 T 선택하지 지칠대로 지친 추상 형식 패턴을 던지는이 종료된다. 여기 무슨 일이야?
해결법
-
==============================
1.스칼라, 제네릭리스트 [지능] 및리스트 [부울]의 런타임 유형이 실제로 동일하다고하는 수단은, 실행시에 소거된다. 전체 JVM이 제네릭 형식을 지 웁니다 때문이다. 이 모든 JVM이 제네릭이 처음 소개되었을 때 이전 버전과 호환되는 방식으로 다시 유지하고 싶었 기 때문에 예정이다 ...
스칼라, 제네릭리스트 [지능] 및리스트 [부울]의 런타임 유형이 실제로 동일하다고하는 수단은, 실행시에 소거된다. 전체 JVM이 제네릭 형식을 지 웁니다 때문이다. 이 모든 JVM이 제네릭이 처음 소개되었을 때 이전 버전과 호환되는 방식으로 다시 유지하고 싶었 기 때문에 예정이다 ...
당신이 사용하는 일반적인 어떤 주위에 스레드 할 수있는 암시 적 매개 변수 인 ClassTag를 사용하여 스칼라에서이 주위에 방법이있다.
인수로 일반의 유형을 통과으로 ClassTag : 당신은 생각할 수 있습니다. (또한 입력 ClassTag [T]의 암시 파라미터를 전달하는 문법적이다.)
import scala.reflect.ClassTag class SheetUpdater(s: Sheet) { def replace3[T <: Group : ClassTag](g: T): Unit = { s.children.head match { case (_, _:T) => //! case (_, _:Attributes) => } } }
이 질문의 최근 답변은 자세한 내용이있다.
from https://stackoverflow.com/questions/38570948/type-erasure-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] JSON 파일이 아닌 폴더로 RDD 데이터를 저장하는 방법 (0) | 2019.11.24 |
---|---|
[SCALA] 어떻게 요소의 액세스 스파크 RDD 배열에 인덱스를 기반으로 (0) | 2019.11.24 |
[SCALA] 왜 스칼라에서 def``와`var`을 무시하는 것은 불가능? (0) | 2019.11.24 |
[SCALA] 같은 발견하고 필요한 데이터 유형과 스파크에서 : "오류 형식이 일치하지 않습니다" (0) | 2019.11.24 |
[SCALA] 스칼라 mapValues 게으른인가? (0) | 2019.11.24 |