Ho due variabili come segue:Qual è il vantaggio di utilizzare i riferimenti al metodo in questo caso?
List<Basket> bigBasket = new ArrayList<>(); Basket basket = new Basket();
ho scritto il seguente codice per aggiungere una relazione tra gli elementi in bigBasket
e basket
:
for (Fruit specialFruit : bigBasket.get(0).getFruitInBasket()) {
for (Fruit fruit : basket.getFruitInBasket()) {
specialFruit.addRelationship(fruit);
}
}
Ora questo è tutto bene, ma IntelliJ ispezionato il codice e offerto di migliorarlo con l'utilizzo di un riferimento al metodo, così ho ottenuto il seguente:
for (Fruit specialFruit : bigBasket.get(0).getFruitInBasket()) {
basket.getFruitInBasket().forEach(specialFruit::addRelationship);
}
Quindi quanto sopra ha meno linee ma qual è il reale vantaggio di ciò? Non sono completamente informato sui vantaggi delle funzionalità di Java 8, quindi probabilmente è questo il motivo per cui non capisco davvero cosa sta succedendo.
A mio parere, la versione "migliorata" del codice non è molto leggibile nel senso di comprendere immediatamente ciò che sta accadendo rispetto a uno standard per ciclo assumendo che non si abbia molta conoscenza delle funzionalità di Java 8.
Qualcuno potrebbe spiegare i vantaggi del codice "migliorato" rispetto allo standard per ciclo?
MODIFICA: rimossi riferimenti errati a lambda. Il codice usa solo riferimenti di metodo - solo un errore di gergo da parte mia!
Forse è solo il riferimento al metodo che non sembra intuitivo? Che ne dici di 'bigBasket.get (0) .getFruitInBasket(). ForEach (specialFruit -> basket.getFruitInBasket(). ForEach (fruit -> specialFruit.addRelationship (fruit)))? – Holger
Certamente un idioma non può essere letto da una persona che non ha familiarità con esso, ma questo è solo un truismo. Il punto veramente rilevante è questo: quale è più leggibile per una persona che abbia ugualmente familiarità con * entrambi * gli idiomi? Per me, il costrutto 'forEach' è molto più semplice perché ci sono meno cose da controllare per essere sicuri di cosa sia lo snippet. –