有没有一种方法可以定义一个共同类型的备选集合:
trait Mutability
trait Mutable extends Mutability
trait Immutable extends Mutability
并且编译器可以预先排除类似以下的问题:
object Hat extends Mutable with Immutable
我相信通过拥有一个共同的、冲突的成员,我可以强制发生一些编译错误,但错误信息有点晦涩:
trait Mutability
trait Mutable extends Mutability { protected val conflict = true }
trait Immutable extends Mutability { protected val conflict = true }
object Hat extends Mutable with Immutable
<console>:10: error: object Hat inherits conflicting members:
value conflict in class Immutable$class of type Boolean and
value conflict in class Mutable$class of type Boolean
(Note: this can be resolved by declaring an override in object Hat.)
object Hat extends Immutable with Mutable
有没有更直接的方式来表达这个约束,并且不允许某人通过编译器提供的提示来绕过它(在 Hat 中覆盖 'conflict')?
感谢任何见解。
class Mat(name: String) extends Mutable
class Pat extends Immutable
处理程序可以安全地假定object PatEvents extends Events[Pat]
无法编译,且PatEvents.Add/Remove
不存在。 - jmcnulty