2016-08-15 39 views
1

我試圖讓TreeNode子類如何/在哪裏實現與產品相關的方法?

org.apache.spark.sql.catalyst.trees.TreeNode 

類的星火2.0.0源代碼的把握,卻發現產品的部分有趣。

的定義開始爲

abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product { 

然後我考察trait Product和無法弄清楚如何做TreeNode瞭解哪種方法ProductAritytrait Product需要ProductElement的統計信息。

我搜索了一會兒,發現有人指出,Scala編譯器會找出那些統計數字case class,但TreeNode不是個例類,我無法找到一些協議或暗示Product可以從實施得到獲得所需的數字,例如ProductArity返回。

那麼有人知道背後的黑魔法是什麼?

回答

1

樹節點不是個例類

但是,每一個非抽象類擴展TreeNode是。也可能有一些非案例類,手動執行productArityproductElement,但我不認爲Spark中有任何類。

+0

是的我仍然可以接受它:P。還有一件事:使'TreeNode'擴展'Product'的意圖是什麼?如果case類是可繼承的,那麼我們可以設計'TreeNode'作爲'抽象case類'還是類似的東西? – Dragonly

+0

您可以從案例類繼承,但它很少有意義。而使'TreeNode'成爲'抽象案例類'將表現出與想要的非常不同的表現。 –

相關問題