如何在不使用向下转换或类检查的情况下实现多态二叉搜索树(使用EmptyTree和NonEmptyTree)?
答案 0 :(得分:1)
创建一个通用界面,例如:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
然后提供实现公共接口的类:
class EmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K key) {
// ...
}
}
class NonEmptyTree<K, V> implements TreeNode<K, V> {
public TreeNode<K, V> find(K searchKey) {
// ...
}
}
您对EmptyTree的实现将始终指示搜索项目失败(无论是通过返回null还是抛出异常),而NonEmptyTree的实现将返回自身(如果提供的搜索键匹配)或委托给左或右子树。因为左或右子树将始终存在(它将是NonEmptyTree或EmptyTree),“NonEmptyTree”类可以通过公共接口简单地引用它的子节点,并依赖于运行时类型将做正确的事实(因此在算法的实现中没有必要对子项进行任何转换或类型检查)。
您需要知道运行时类型的唯一地方是构建子项时。