有没有办法阻止两个特征混合到一个类中?
我知道您可以使用 self 类型注释来要求仅将特征混合到特定类型的类中,但是您可以使用类似的构造来要求目标类不混合在特定类型中吗?
例如:
abstract class Collector(p: Boolean)
trait Cache
trait ACache extends Cache { self: Collector => }
trait BCache extends Cache { self: Collector => }
我可以要求在
Collector
、 ACache
中混合 BCache
的任何实现,或者没有任何缓存特征,但不能同时混合 ACache
和 BCache
吗?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/