Дженерики Scala: Int не соответствует Comparable?

Следующие объявления Scala допустимы:

trait Base[B <: Base[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] {
    // ...
}

trait Meta[B <: Base[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] extends Ordered[Meta[_,_,_]] {
    // ...
}

trait BaseWithID[B <: BaseWithID[B,M,ID], M <: Meta[B,M,ID], ID <: Comparable[ID]] extends Base[B,M,ID] with Ordered[B] {
    // ...
}


trait BaseWithIntID[B <: BaseWithIntID[B,M,ID], M <: MetaWithIntID[B,M,ID], ID <: Comparable[ID]] extends BaseWithID[B,M,ID] {
    // ...
}

trait MetaWithIntID[B <: BaseWithIntID[B,M,ID], M <: MetaWithIntID[B,M,ID], ID <: Comparable[ID]] extends Meta[B,M,ID] {
    // ...
}

Но следующие два - нет:

trait BaseWithIntID[B <: BaseWithIntID[B,M], M <: MetaWithIntID[B,M]] extends BaseWithID[B,M,Int] {
    // ...
}

trait MetaWithIntID[B <: BaseWithIntID[B,M], M <: MetaWithIntID[B,M]] extends Meta[B,M,Int] {
    // ...
}

Разница в том, что я удалил параметр типа ID в BaseWithIntID и MetaWithIntID и явно указал Int в их соответствующих базовых характеристиках. Но это не компилируется, значит ли это, что Int несовместим в Scala? Если да, то что я делаю не так? Я попробовал Ordered вместо Comparable, и это не имело значения.

Я использую Eclipse, и, как обычно, сообщения об ошибках бесполезны:

type arguments [B,M,Int] do not conform to trait BaseWithID's type parameter bounds [B <: BaseWithID[B,M,ID],M <: Meta[B,M,ID],ID <: java.lang.Comparable[ID]]

Он просто говорит, что что-то не так, но не указывает, какой параметр типа неверен , и почему. Глядя на этот вопрос , я подумал, что могу попробовать вместо этого «ID

На самом деле, это тоже не работает (с то же сообщение об ошибке):

trait TestBase extends BaseWithID[TestBase,TestMeta,Int]

trait TestMeta extends Meta[TestBase,TestMeta,Int]

5
задан Community 23 May 2017 в 11:52
поделиться