[英]Class with private constructor and factory in scala?
如何在Scala中使用私有構造函數和靜態create方法實現類?
以下是我目前在Java中的使用方法:
public class Tree {
private Node root;
/** Private constructor */
private Tree() {}
public static Tree create(List<Data2D> data) {
Tree tree = new Tree();
return buildTree(tree, data);//do stuff to build tree
}
你所寫內容的直接翻譯就像
class Tree private () {
private var root: Node = null
}
object Tree {
def create(data: List[Data2D]) = {
val tree = new Tree()
buildTree(tree,data)
tree
}
}
但是這是一種解決問題的一種非Scalaish方法,因為你正在創建一個未初始化的樹,它可能不安全使用,並將其傳遞給其他各種方法。 相反,更規范的代碼將具有豐富(但隱藏)的構造函數:
class Tree private (val root: Node) { }
object Tree {
def create(data: List[Data2D]) = {
new Tree( buildNodesFrom(data) )
}
}
如果有可能以這種方式構建。 (在這種情況下取決於Node
的結構。如果Node
必須引用父樹,那么這可能要么不起作用要么更難尷尬。如果Node
不知道,那么這將是首選的樣式。 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.