He estado buscando mucho código recientemente (para mi propio beneficio, ya que todavía estoy aprendiendo a programar), y he notado una serie de proyectos de Java (de lo que parecen ser programadores muy respetados) en donde utilizan algún tipo de down-casting inmediato.¿Cuál es el beneficio del down-casting inmediato?
que en realidad tienen múltiples ejemplos, pero aquí hay uno que me sacó directamente desde el código:
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;
}
Y desde el mismo proyecto, aquí hay otro (tal vez más concisa) ejemplo:
private Set<Coordinates> liveCellCoordinates = new HashSet<Coordinates>();
En el primer ejemplo, puede ver que el método tiene un tipo de devolución de Set<Coordinates>
; sin embargo, ese método específico siempre devolverá un HashSet
, y ningún otro tipo de Set
.
En el segundo ejemplo, liveCellCoordinates
se definió inicialmente como , pero se convierte inmediatamente en HashSet
.
Y no es solo este proyecto único y específico: he encontrado que este es el caso en varios proyectos.
Tengo curiosidad por saber cuál es la lógica detrás de esto? ¿Hay algunas convenciones de código que consideren esta buena práctica? ¿Hace que el programa sea más rápido o más eficiente de alguna manera? ¿Qué beneficio tendría?
Estos son en realidad ejemplos de up-casting (de un tipo específico a un tipo más amplio). Consulte, por ejemplo, la [entrada de Wikipedia en downcasting] (http://en.wikipedia.org/wiki/Downcasting). –
@TedHopp Tome el segundo ejemplo que proporcioné, en ese ejemplo, empiezo como 'Conjunto ', y luego convierto a' HashSet' (creo que 'HashSet' es más específico que' Set'). ¿No sería eso malo? ¿Desde que estoy pasando de un amplio tipo de 'Set' a un tipo específico de' HashSet'? – Bob
En el segundo ejemplo, está creando un 'HashSet' y convirtiéndolo en un' Set' al asignarlo a 'liveCellCoordinates'. No existe el objeto 'Set' hasta que se evalúe la 'nueva' expresión y no se 'convierte' a' HashSet'. –