Hvordan kan jeg gjennomføre en polymorfe binært søketre (som gjør bruk av EmptyTree og NonEmptyTree) uten å bruke støping nedad eller klasse kontroll?
java polymorfe binært søketre
Lag et felles grensesnitt for eksempel:
interface TreeNode<K, V> {
TreeNode<K, V> find(K key)
}
Deretter gi klasser som implementerer felles grensesnitt:
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) {
// ...
}
}
Implementeringen for EmptyTree vil alltid indikerer en svikt i å søke etter elementet (enten ved å returnere null eller ved å kaste et unntak), mens gjennomføringen av NonEmptyTree vil enten returnere selv (hvis gitt søke viktige kamper) eller delegere til venstre eller høyre subtre. Fordi venstre eller høyre subtre vil alltid eksistere (vil det enten være en NonEmptyTree eller en EmptyTree), den "NonEmptyTree" klasse kan bare referere til sine barn via felles grensesnitt og stole på det faktum at runtime typen vil gjøre det rette (derfor er det ikke nødvendig å gjøre noen støping eller typekontroll av barna i gjennomføringen av den algoritme).
Det eneste stedet hvor du trenger å vite runtime typen er når du konstruere barn.













