簡體   English   中英

帶有私有構造函數和scala工廠的類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM