Back to Scala3

E076: Value Classes May Not Wrap Another Value Class

docs/_docs/reference/error-codes/E076.md

3.8.41.4 KB
Original Source

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

scala
class Meters(val value: Double) extends AnyVal
class Distance(val meters: Meters) extends AnyVal

Error

scala
-- [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

scala
// 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)
scala
// Or use a regular class for the outer wrapper
class Meters(val value: Double) extends AnyVal
class Distance(val meters: Meters)
<!-- SOURCE-ONLY: Remove the notice below once this page has been manually updated. --> <aside class="warning"> This reference page was created with LLM assistance - the description of the error code may not be accurate or cover all possible scenarios. </aside>