Saluta il metodo:
public void hello(Data data);
Questo metodo utilizza alcuni dati ed esegue ... qualunque cosa. Ora, scritto in questo modo, il metodo è molto specifico - cioè l'argomento è molto specifico. Ma ora, nella vita reale, questo Data
(ad esempio) può provenire da es. classe chiamata DataProvider
:
public class DataProvider() {
public Data getMeData(int from, int to);
}
Ora, la maggior parte delle volte in cui chiamiamo hello
dobbiamo chiamare dataProvider.getMeData()
. Poiché questo è ripetitivo, puoi fare:
public void hello(int from, int to);
Che è essenzialmente:
public void hello(DataProvider dp);
Questo sembra conveniente poichè, forse, in futuro, avrò bisogno di dati diversi oltre alla classe Data
, e nessuna firma verrà modificata. In altre parole, il metodo stesso sapere quali dati prendere.
Questo secondo caso è un esempio di un metodo con argomenti più generali.
Quale avrebbe più senso:
- Il primo, più rigoroso, più mirato.
- Il secondo, generico, ma meno mirato.
Non si tratta di passare oggetti personalizzati. In entrambi i casi, vengono passati oggetti personalizzati. La differenza è che l'ambito di passaggio dell'oggetto è diverso. Il primo contiene solo dati grezzi. Il secondo è più generale, contiene più ciò di cui ha bisogno quel metodo.