Вы должны ограничить This
, чтобы быть суперклассом Null
- это способ сообщить компилятору, что null
является допустимым значением для этого типа.(На самом деле, размышления о Any
, AnyRef
и AnyVal
только запутывают проблему - просто спросите у компилятора, что вы хотите!)
trait Link[This >: Null] {
var next:This = null
}
Однако я бы посоветовал вам избегать использованияnull
, вы можете использовать Option[This]
и влиять на None
- такая конструкция позволит вам использовать сопоставление с шаблоном, и это очень убедительное утверждение, что клиенты, использующие это поле, могут ожидать, что оно, возможно, не будет иметь значения.
trait Link[This] {
var next:Option[This] = None
}