警告在子类中使用更有效的功能

时间:2018-06-25 07:21:35

标签: scala inheritance warnings software-design

我想为图形实现一个scala库。该库还应包含不同类型的树。

1类树扩展了类图

2类图具有方法getAllPrecursors(Node n),该方法返回可以到达n的所有Node。

3类树具有方法getParent(Node n),该方法返回Node n的父级(作为选择,不标记根节点)

现在,如果有人为树调用方法“ getAllPrecursors”,我想显示一个警告,例如“树最多具有1个前体,请改用getParent”。

有没有办法做到这一点?有没有更好的方法来构建这个库?树不应该是图的子类吗?

1 个答案:

答案 0 :(得分:2)

首先,不要担心性能,除非您可以证明此代码的性能对整体性能至关重要:“过早的优化是万恶之源”

不过,您可以通过重载getAllPrecursors并将其标记为已弃用来做您想做的事情:

class graph {
  def getAllPrecursors(n: Node): List[Node] = ...
}

class tree extends graph {
  def getParent(n: Node) = ...

  @deprecated("Use getParent rather that getAllPrecursors", "1.0")
  override def getAllPrecursors(n: Node) = List(getParent(n))
}

如果您对类型getAllPrecursors的值使用tree,而不对类型graph的值使用tree(即使该值实际上是{的一个实例),则这将发出弃用警告。 {1}})

就设计而言,最好将getAllPrecursorsgetParent作为Node(和TreeNode)上的方法,而不是图形本身。