如何在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)
你所写内容的直接翻译就像
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不知道,那么这将是首选的样式.)
| 归档时间: |
|
| 查看次数: |
2297 次 |
| 最近记录: |