2016-09-06 9 views
4

このコードの仕組みを理解できません。ノード[TypeOne <:Node [TypeOne]]はスカラーの意味は何ですか?

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] 
} 

は当初、私は[TypeOne <:ノードが[TypeOne]]署名クラスノードで思ったことは、型TypeOneのXのような任意の変数は、Node型のなければならなかったか、それはサブクラスだけど、それはないと思われることを意味し私はNode [String]型とNode [Int]型のval treeNodeを作成することができます。では、この署名は何をしていますか?

+0

驚異的なF境界型多型。 – Ven

答えて

3

このパターンは、通常、具体的なサブタイプを静的に知りたいベースクラスまたは特性に使用されます。その後、

class MyNode extends Node[MyNode] 

と直接MyNodeの代わりNodeを使用します。おそらく、ライブラリの設計者は、あなたがNodeを拡張する予定です。

3

これは、スカラの「f束縛多型」と呼ばれます。そこの情報の多くはそれについてそこですので、代わりにここでそのすべてを列挙しようとしているのは、私はちょうどいくつかの有用なリンクを共有します:

関連する問題