2016-04-27 2 views
5

У меня есть две чертыДоля общего между чертами

trait Base[A] 

trait SometimesUsedWithBase[A] { 
    this: Base[A] => 
} 

Затем я использую их с классом

class StringThing extends Base[String] with SometimesUsedWithBase[String] 

Было бы замечательно, если бы у меня не было, чтобы определить тип SometimesUsedWithBase «s , и вместо этого он каким-то образом понимает, что использует тип, определенный в Base так, чтобы он выглядел так:

class StringThing extends Base[String] with SometimesUsedWithBase 

Возможно ли это?

ответ

7

Вы должны быть в состоянии сделать что-то подобное.

trait Base[A] { 
    type BaseType = A 
} 

trait SometimesUsedWithBase { 
    this: Base[_] => 
    def someFunction: BaseType 
} 

class StringThing extends Base[String] with SometimesUsedWithBase { 
    def someFunction: String = "" 
} 
+0

Это прекрасно работает для меня, тем более, что они все равно связаны. Спасибо! – MintyAnt

+0

Очевидно, если вы добавите параметр someFunction, который имеет тип BaseType, вы получите ошибки относительно позиций Covariant и Contravariant. – MintyAnt

Смежные вопросы