繁体   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