Devo dichiarare il tipo più specifico come tipo di metodo di restituzione?

4

In Android posso inserire solo ArrayList di Parcelable oggetti in Intent :

Intent putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value);

Non posso inserire un List<? extends Parcelable> .

Ho il metodo privato che ottiene l'elenco degli oggetti Parcelable da Intent (cioè il metodo è utilizzato nella sua stessa classe).

Come ho detto, c'è sempre ArrayList in Intent . Devo dichiarare il tipo di ritorno di questo metodo come ArrayList<> ? O List<> ?

Penso che ArrayList sarebbe meglio perché un ArrayList è anche un List . Ma spesso leggo che dovrei dichiarare il tipo di campo come il tipo più generale possibile. I.e , Collection<> (o List<> se ho bisogno di una raccolta ordinata) invece di ArrayList<> . Ma non vedo alcun motivo per farlo per questo metodo di ritorno.

    
posta Leonid Semyonov 10.10.2014 - 08:54
fonte

1 risposta

13

Una dichiarazione (sia che si tratti di un tipo di reso, di un commento dell'API o di un contratto) è una promessa che si consegnerà qualcosa di buono o si eseguirà un servizio. Dichiarare un tipo specifico di ritorno è una promessa più grande che dichiarare un tipo generale che è abbastanza buono per il chiamante, perché ti lega facendo un'azione più specifica.

Se questo è ciò che stai facendo e sarà sempre ciò che stai facendo , allora non c'è problema. Ma se un giorno vorresti rifattorizzare, estendere o migliorare il tuo programma in un modo che implicasse un nuovo, migliore tipo di contenitore, non sarai in grado di farlo, perché il codice del client si interromperà se passi a CoolNewList strutture. Allora dirai a te stesso: "Accidenti, vorrei aver ascoltato quelle persone sagge su StackExchange e fatto delle promesse minime invece di vantarmi con tipi concreti!", Ma sarà troppo tardi per te. Quindi inizierai a consigliare ai programmatori più giovani di mantenere le loro promesse minime, e così il ciclo della vita continua.

    
risposta data 10.10.2014 - 09:00
fonte

Leggi altre domande sui tag