有没有办法阻止两个特征混合到一个类中?

我知道您可以使用 self 类型注释来要求仅将特征混合到特定类型的类中,但是您可以使用类似的构造来要求目标类不混合在特定类型中吗?

例如:

abstract class Collector(p: Boolean)

trait Cache

trait ACache extends Cache { self: Collector => }

trait BCache extends Cache { self: Collector => }

我可以要求在 CollectorACache 中混合 BCache 的任何实现,或者没有任何缓存特征,但不能同时混合 ACacheBCache 吗?
class GoodCollector(p: Boolean) extends Collector(p) with ACache //legal
class BadCollector(p: Boolean) extends Collector(p) with ACache with BCache //illegal

最佳答案

如果您像这样更改 Cache:

trait Cache[A <: Cache[_]]

trait ACache extends Cache[ACache] { self: Collector =>
}

trait BCache extends Cache[BCache] { self: Collector =>
}

然后:
class BadCollector(p: Boolean) extends Collector(p) with ACache with BCache

将失败:

关于scala - 强制 Scala 特征不兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56812583/

10-12 21:18