E076: Value Classes May Not Wrap Another Value Class
This error is emitted when a value class (a class extending AnyVal) has a parameter whose type is another user-defined value class.
A value class may not wrap another user-defined value class because it would complicate the JVM representation and optimization of value classes.
Example
class Meters(val value: Double) extends AnyVal
class Distance(val meters: Meters) extends AnyVal
Error
-- [E076] Syntax Error: example.scala:2:6 --------------------------------------
2 |class Distance(val meters: Meters) extends AnyVal
| ^
| A value class may not wrap another user-defined value class
Solution
// Wrap the underlying primitive type directly
class Meters(val value: Double) extends AnyVal
class Distance(val value: Double) extends AnyVal
object Distance:
def fromMeters(m: Meters): Distance = new Distance(m.value)
// Or use a regular class for the outer wrapper
class Meters(val value: Double) extends AnyVal
class Distance(val meters: Meters)
In this article