Esta es una verdadera pregunta para principiantes (todavía estoy aprendiendo los conceptos básicos de Java).¿Por qué se declaran las variables con su nombre de interfaz en Java?
puedo (tipo de) entender por qué los métodos obtendrá una lista <cadena> en lugar de una Cadena de ArrayList < >, o por qué aceptarían un parámetro de lista en lugar de un ArrayList. Si no hace ninguna diferencia en el método (es decir, si no se requieren métodos especiales de ArrayList), esto haría que el método sea más flexible y más fácil de usar para las personas que llaman. Lo mismo ocurre con otros tipos de colecciones, como Establecer o Mapa.
Lo que no entienden: que parece ser una práctica común para crear variables locales como esto:
List<String> list = new ArrayList<String>();
Si bien esta forma es menos frecuente:
ArrayList<String> list = new ArrayList<String>();
¿Cuál es la ventaja aquí?
Todo lo que puedo ver es una desventaja menor: se debe agregar una línea de "importación" separada para java.util.List. Técnicamente, se puede usar "import java.util. *", Pero tampoco lo veo con mucha frecuencia, probablemente porque algunas IDE agregan automáticamente las líneas de "importación".
Esto es la invenciónphilia. Las eficiencias de una implementación frente a otra dependen del código que usa la variable: no puedo ver que alguna vez desearía algo más que un estrecho acoplamiento entre las dos. –
"No puedo ver si alguna vez querría algo más que un estrecho acoplamiento entre los dos": ¿no está todo el concepto de interfaces basado en el hecho de que en realidad ** quieres ** un acoplamiento flojo? –
Por supuesto.Pero, ¿cuándo querría un acoplamiento flexible entre el trabajo de una función y sus variables locales? Especialmente cuando se selecciona una implementación de colección, ya que las colecciones a menudo se optimizan para situaciones específicas. –