Recentemente ho guardato molto codice (a mio vantaggio, mentre sto ancora imparando a programmare), e ho notato una serie di progetti Java (da quelli che sembrano essere programmatori di tutto rispetto) in cui usano una sorta di down-casting immediato.Qual è il vantaggio del down-casting immediato?
Io in realtà sono molteplici esempi, ma qui è uno che ho tirato dritto dal codice:
public Set<Coordinates> neighboringCoordinates() {
HashSet<Coordinates> neighbors = new HashSet<Coordinates>();
neighbors.add(getNorthWest());
neighbors.add(getNorth());
neighbors.add(getNorthEast());
neighbors.add(getWest());
neighbors.add(getEast());
neighbors.add(getSouthEast());
neighbors.add(getSouth());
neighbors.add(getSouthWest());
return neighbors;
}
E dallo stesso progetto, ecco un altro (forse più conciso) Esempio:
private Set<Coordinates> liveCellCoordinates = new HashSet<Coordinates>();
Nel primo esempio, è possibile vedere che il metodo ha un tipo restituito di Set<Coordinates>
- tuttavia, quel metodo specifico restituirà sempre solo un HashSet
e nessun altro tipo di Set
.
Nel secondo esempio, liveCellCoordinates
viene inizialmente definito come Set<Coordinates>
, ma viene immediatamente convertito in HashSet
.
E non è solo questo singolo, specifico progetto: ho trovato che questo è il caso in più progetti.
Sono curioso di sapere qual è la logica dietro questo? Esistono alcune convenzioni sul codice che prenderebbero in considerazione questa buona pratica? Rende il programma più veloce o più efficiente in qualche modo? Che vantaggio avrebbe?
Questi sono in realtà esempi di up-casting (da un tipo specifico a un tipo più ampio). Vedi, ad esempio, [la voce di Wikipedia su downcasting] (http://en.wikipedia.org/wiki/Downcasting). –
@TedHopp Prendiamo il secondo esempio che ho fornito, in quell'esempio comincio come un 'Set', e poi converto in un' HashSet' (credo che 'HashSet' sia più specifico del' Set'). Non sarebbe down-casting? Dal momento che sto passando da un tipo generico di 'Set' a un tipo specifico di' HashSet'? – Bob
Nel secondo esempio, si crea un 'HashSet' e lo si converte in un' Set' quando lo si assegna a 'liveCellCoordinates'. Nessun oggetto 'Set' esiste fino a quando non viene valutata l'espressione' new' e nessun 'Set' viene convertito in un' HashSet'. –