Как я могу реализовать полиморфное бинарное дерево поиска (что делает использование EmptyTree и NonEmptyTree) без использования или понижающего приведение класса проверки?
Java полиморфный бинарное дерево поиска
Создание общего интерфейса, такие как:
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 всегда будет указывать на сбой при поиске элемента (независимо от того, возвращая нуль или бросая исключение), в то время как ваша реализация NonEmptyTree либо вернуть себе (если при условии поиска ключевых матчей) или делегировать влево или правые поддерева. Поскольку левый или правое поддерево всегда будет существовать (или будет NonEmptyTree или EmptyTree), класс «NonEmptyTree» может просто сослаться на свои ребенок через общий интерфейс и полагаться на то, что тип выполнения будет делать правильные вещи (при этом нет необходимости делать какую-либо литье или типа проверку детей в реализации алгоритма).
Единственное место, где вам нужно знать тип во время выполнения, когда вы строите ребенок.













