带有私有构造函数和scala工厂的类?

And*_*yuk 4 java 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
    }
Run Code Online (Sandbox Code Playgroud)

Rex*_*err 9

你所写内容的直接翻译就像

class Tree private () {
  private var root: Node = null
}
object Tree { 
  def create(data: List[Data2D]) = {
    val tree = new Tree()
    buildTree(tree,data)
    tree
  }
}
Run Code Online (Sandbox Code Playgroud)

但是这是一种解决问题的一种非Scalaish方法,因为你正在创建一个未初始化的树,它可能不安全使用,并将其传递给其他各种方法.相反,更规范的代码将具有丰富(但隐藏)的构造函数:

class Tree private (val root: Node) { }
object Tree {
  def create(data: List[Data2D]) = {
    new Tree( buildNodesFrom(data) )
  }
}
Run Code Online (Sandbox Code Playgroud)

如果有可能以这种方式构建.(取决于Node这种情况下的结构.如果Node必须引用父树,那么这可能要么不起作用,要么变得更加笨拙.如果Node不知道,那么这将是首选的样式.)