我搜索了很多,但我没有找到任何东西,type declarationscala中这种类型的含义是什么?
type Ident >: Null <: AnyRef
关键字type用于类型别名声明,就像val和def用于值和方法声明一样。在这种情况下,它是一个带有约束的抽象类型别名,因此它是 some 的类型成员,trait或者class- 本地范围内的类型别名不能是抽象的,也不能有约束。
类型Ident是 的子类型AnyRef和超类型Null。
任意参考
AnyRef是所有引用类型、除Int、Long等所有类型Char(Java 原语)之外的所有类型的祖先。
无效的
Null是所有“可为空”类型的子类型。事实上,它是所有引用类型的子类型。
由于所有AnyRef都是可以为空的,因此唯一的附加约束>: Null是Identnot Nothing。
请参阅Scala 的类型层次结构:

添加到@senia 的答案:这不是类型声明,这是一个抽象类型成员声明,可以在上下文中找到,例如
trait Foo { // or perhaps class
type Ident >: Null <: AnyRef
}
并且意味着任何具体实现Foo必须定义某种类型为Ident,并且这种类型必须满足@senia 的答案中描述的约束。
在你的情况下Null是一个子类型Ident并且AnyRef是它的超类型。在没有这个界限的情况下,所有类型的公共子类型是Nothing,但您将其指定为Null,当 Nothing 是所有对象的子类型(包括 Int、Long 等)时,with 是所有对象的子类型。
类型系统中使用了 Null 和 Nothing 之类的东西,基本上是在类型(Contra/Co)方差中。例子:
sealed trait Container[+A >: Null <: AnyRef]
case class Full[A >: Null <: AnyRef](value: A) extends Container[A]
case object Empty extends Container[Null]
这编译得很好:
val c: Container[String] = Full("String")
val e: Container[String] = Empty
但这失败了,因为我们的下限是 Null,上限是 AnyRef:
val ff: Container[Int] = Full(10)
val f: Container[Int] = Empty
我们不能放在Int这里,因为这种类型违反了约束