Есть ли способ предотвратить смешивание двух признаков в одном классе?
Я знаю, что вы можете использовать аннотации типа себя, чтобы требовать, чтобы свойство смешивалось только в классе определенного типа, ноМожете ли вы использовать аналогичную конструкцию, чтобы требовать, чтобы целевой класс НЕ смешивался с определенной чертой?
Например:
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