Cum pot pune în aplicare un arbore polimorfă binar de căutare (care face uz de EmptyTree și NonEmptyTree) fără a utiliza downcasting sau clasă de verificare?
java polimorfă arbore binar de căutare
Crearea unei interfețe comune, cum ar fi:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
Apoi, oferă clase care implementează interfața comună:
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) {
// ...
}
}
implementarea pentru EmptyTree va indica întotdeauna un eșec în căutarea pentru elementul (fie prin returnarea nul sau prin aruncarea unei excepții), în timp ce implementarea de NonEmptyTree se va întoarce fie (în cazul în căutare furnizate meciurile-cheie) sau de a delega la stânga sau subarbori dreapta. Deoarece subarbore stânga sau dreapta va exista întotdeauna (acesta va fi fie un NonEmptyTree sau un EmptyTree), clasa „NonEmptyTree“ se poate referi doar la copiii săi prin intermediul interfeței comune și se bazează pe faptul că tipul de execuție va face ceea ce trebuie (prin urmare, nu este necesar de a face orice tip de turnare sau de verificare a copiilor în punerea în aplicare a algoritmului).
Singurul loc unde trebuie să știți tipul de execuție este atunci când construi copii.













