E210: Value Class Cannot Extend Alias of AnyVal
E210: Value Class Cannot Extend Alias of AnyVal
이 에러는 AnyVal을 직접 상속하는 대신 AnyVal의 타입 별칭(alias)을 상속하는 값 클래스를 정의하려고 할 때 발생해요.
본문
값 클래스는 AnyVal을 직접 상속해야 해요. 타입 별칭을 사용하면 간접 계층이 생기는데, 값 클래스에 필요한 특별한 처리를 위해 컴파일러가 이 간접 계층을 해석할 수 없어요.
예시 (Example)
type MyAnyVal = AnyVal
class Wrapper(val value: Int) extends MyAnyVal
에러 (Error)
-- [E210] Syntax Error: example.scala:3:6 --------------------------------------
3 |class Wrapper(val value: Int) extends MyAnyVal
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|A value class cannot extend a type alias (type MyAnyVal) of AnyVal
해결 방법 (Solution)
타입 별칭 대신 AnyVal을 직접 상속해요.
class Wrapper(val value: Int) extends AnyVal
대안으로, 추상화가 필요하다면 값 클래스 대신 불투명 타입(opaque type)을 고려해 봐요.
object Types:
opaque type Wrapper = Int
object Wrapper:
def apply(value: Int): Wrapper = value
extension (w: Wrapper)
def value: Int = w