У меня есть случай, когдаMap.contains с супер-типа ключа типа
trait EventLike
trait Event extends EventLike
trait API {
private var map = Map.empty[Event, Any]
def contains(e: EventLike): Boolean = map.contains(e)
}
Это не работает из-за инвариантности в ключевых типу карты:
<console>:58: error: type mismatch;
found : EventLike
required: Event
def contains(e: EventLike): Boolean = map.contains(e)
^
Что хорошая работа с минимальным штрафом за производительность. То есть, я специально не хочу, чтобы ввести эту ужасную вещь:
def contains(e: EventLike): Boolean = e match {
case e1: Event => map.contains(e1)
case _ => false
}
Есть другой Map
реализации (может быть изменчивым, как это нить местный) я мог бы использовать?
Почему бы вам не добавить более конкретный содержащий метод API для событий? –
@SeanVieira, потому что сайт вызова обычно имеет дело с непрозрачными объектами EventLike. –