Hoe kan ik de uitvoering van een polymorfe binaire zoekboom (die gebruik maken van EmptyTree en NonEmptyTree maakt) zonder gebruik te maken downcasting of klasse controle?
java polymorfe binaire zoekboom
Maak een gemeenschappelijke interface, zoals:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
Dan bieden klassen die de gemeenschappelijke interface uit te voeren:
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) {
// ...
}
}
Uw implementatie voor de EmptyTree zal altijd wijzen op een storing in het zoeken naar het item (of door terug te keren null of door het gooien van een uitzondering), terwijl de uitvoering van NonEmptyTree ofwel zich terug te keren (indien de verstrekte zoeksleutel wedstrijden) of delegeren naar links of rechts substructuren. Omdat de linker of rechter deelboom altijd zal bestaan (het zal ofwel een NonEmptyTree of een EmptyTree), de "NonEmptyTree" klasse gewoon verwijzen naar haar kinderen via de gemeenschappelijke interface en vertrouwen op het feit dat de runtime-het juiste ding zal doen (dus is het niet nodig om gieten of typecontrole van de kinderen in de uitvoering van het algoritme).
De enige plek waar je moet weten de runtime type is als je de kinderen te bouwen.













