下面的构造有意义吗?使用它有什么好处?
final case class Id(uuid: UUID) extends AnyVal
据我了解,上述结构在某些here场景中不必实例化ID。但是我有一些疑问,因为我没有找到任何使用AnyRef作为参数的示例。
答案 0 :(得分:0)
是的,这个例子很有意义。当您想要某个类型的特定语义,但又不想支付随之而来的额外分配费用时,扩展AnyVal
很有用。例如,假设您有一个用于输出值的字符串表示形式的typeclass实例,例如Show[A]
,并且想为UUID
提供特定的语义,但是在其中已经存在Show[UUID]
的实例范围是您无法控制的,这是在包装类型并为其引入隐式类型类时有用的。
请注意,AnyVal
可能最终会在this documentation中提到的特定情况下分配包装器类的实例:
实际上在以下情况下实例化了一个值类:
- 值类被视为另一种类型。
- 将值类分配给数组。
- 进行运行时类型测试,例如模式匹配。