scala中的Node [TypeOne<:Node [TypeOne]]是什么意思?

时间:2016-09-06 08:56:40

标签: scala generics

我无法弄清楚此代码的工作原理?

class Node[TypeOne <: Node[TypeOne]] {
  var x: TypeOne = _
}


object Tree extends App {
  val treeNode = new Node[String]
  treeNode.x = "ten"
  //treeNode.x = new TreeNode[String]
}

最初我认为签名类Node [TypeOne&lt;:Node [TypeOne]]意味着像TypeOne类型的x这样的变量必须是Node类型或它的子类,但它似乎是因为我可以创建Node [String]和Node [Int]类型的val treeNode,所以不是这样。那么签名是做什么的呢?

2 个答案:

答案 0 :(得分:3)

此模式通常用于想要静态了解其具体子类型的基类或特征。最有可能的是,图书馆设计师希望您扩展Node

class MyNode extends Node[MyNode]

然后直接使用MyNode代替Node

答案 1 :(得分:3)

这在scala中被称为“f有界多态”。那里有很多关于它的信息,所以不要试图在这里列举所有这些,我只是分享一些有用的链接: