Questa è una vera domanda per principianti (sto ancora imparando le basi Java).Perché le variabili dichiarate con il loro nome di interfaccia in Java?
posso (o quasi) a capire perché i metodi dovrebbero restituire una lista <String> piuttosto che un ArrayList <String>, o perché dovrebbero accettare un parametro di elenco, piuttosto che un ArrayList. Se non fa alcuna differenza per il metodo (cioè, se non sono richiesti metodi speciali da ArrayList), ciò renderebbe il metodo più flessibile e più facile da usare per i chiamanti. La stessa cosa vale per altri tipi di raccolta, come Set o Mappa.
Quello che non capisco: sembra essere pratica comune per creare le variabili locali come questo:
List<String> list = new ArrayList<String>();
Anche se questa forma è meno frequente:
ArrayList<String> list = new ArrayList<String>();
Qual è il vantaggio qui?
Tutto quello che posso vedere è uno svantaggio minore: è necessario aggiungere una riga "import" separata per java.util.List. Tecnicamente, "import java.util. *" Potrebbe essere usato, ma non lo vedo molto spesso, probabilmente perché le linee di "importazione" vengono aggiunte automaticamente da qualche IDE.
Questo è abstractofilia. Le efficienze di un'implementazione rispetto a un'altra dipendono dal codice che _usatta_la variabile: non riesco a vedere che vorrei mai qualcosa ma un accoppiamento stretto tra i due. –
"Non riesco a vedere che vorrei mai qualcosa di diverso da un accoppiamento stretto tra i due": l'intero concetto di interfacce non è basato sul fatto che in realtà ** vuoi ** un accoppiamento lento? –
Ovviamente.Ma quando vorresti un accoppiamento lento tra il lavoro di una funzione e le sue variabili locali? Soprattutto quando si seleziona un'implementazione di una raccolta, poiché le raccolte sono spesso ottimizzate per situazioni specifiche. –