Сегодня я хотел узнать о супертипах List
:
sealed abstract class List[+A] extends AbstractSeq[A]
with LinearSeq[A]
with Product
with GenericTraversableTemplate[A, List]
with LinearSeqOptimized[A, List[A]]
Ничего себе, поэтому List
уже имеет пять непосредственных супертипов. Пусть выбирают один случайным образом:
trait LinearSeq[+A] extends Seq[A]
with scala.collection.LinearSeq[A]
with GenericTraversableTemplate[A, LinearSeq]
with LinearSeqLike[A, LinearSeq[A]]
Хорошо, пусть выбирает тот, у которого наиболее похожее имя:
trait LinearSeqLike[+A, +Repr <: LinearSeqLike[A, Repr]] extends SeqLike[A, Repr]
А, кажется, мы добираемся куда-то, остался только один супертип:
trait SeqLike[+A, +Repr] extends Any
with IterableLike[A, Repr]
with GenSeqLike[A, Repr]
with Parallelizable[A, ParSeq[A]]
В этот момент я сдался. Насколько глубоко этот график идет? Какие из этих супертипов концептуально релевантны, а какие из них - только детали реализации или трюки оптимизации?
Как можно понять такой огромный граф наследования?