Я пишу класс, который служит базовым классом для серии одноэлементных объектов. В каждом одноэлементном объекте будут vals, представляющие определенные свойства, и я хочу написать метод, который для каждого одноэлементного объекта принимает только созданные им объекты.
Итак, у меня есть следующее:
class Obj[M <: Maker]
class Maker {
implicit val me: this.type = this
def make[M <: Maker](implicit maker: M) = new Obj[M]
def accept(obj: Obj[this.type]) = {...}
}
Пока все хорошо. Затем я хочу объявить один из этих одноэлементных объектов:
object M extends Maker {
val a = make
}
Но затем, если я попробую это:
M.accept(M.a)
, я получу ошибку времени компиляции:
type mismatch; found : com.test.Obj[object com.test.M] required: com.test.Obj[com.test.M.type]
Мои вопросы:
com.test.M
, и чем он отличается от com.test.M.type
?