E074: Value Classes May Not Be Abstract
This error is emitted when a value class (a class extending AnyVal) is declared as abstract.
Value classes must be concrete because they are meant to be inlined by the compiler. An abstract value class cannot be instantiated and therefore cannot serve its purpose of avoiding object allocation.
Example
abstract class Wrapper(val value: Int) extends AnyVal
Error
-- [E074] Syntax Error: example.scala:1:15 -------------------------------------
1 |abstract class Wrapper(val value: Int) extends AnyVal
| ^
| Value classes may not be abstract
Solution
// Remove the abstract modifier
class Wrapper(val value: Int) extends AnyVal
// For abstraction, use a universal trait
trait Numeric extends Any:
def value: Int
class Wrapper(val value: Int) extends AnyVal with Numeric
In this article