Il se pourrait que vous ayez entendu une extrapolation de la loi de Postel : "Soyez conservateur dans ce que vous envoyez, libéral dans ce que vous acceptez."
Il s'agit principalement de maximiser la réutilisabilité du code. Il est facile de trouver des cas pour montrer pourquoi cela aide. Prenons l'exemple de Java Iterable<T>
. Si la seule chose que votre méthode fait est de parcourir tous les T
s, avoir un Iterable<T>
comme type de paramètre vous permet d'utiliser cette méthode avec plus de 60 classes intégrées, sans parler des classes personnalisées qui implémentent l'interface. Si vous le limitez à, disons, Vector<T>
tout code qui appelle votre méthode devra être converti en Vector<T>
premier.
D'un autre côté, le retour d' un à Iterable<T>
partir d'une méthode limite la quantité de code qui peut utiliser votre valeur de retour à ceux qui prennent un Iterable<T>
paramètre. Si vous retournez un type très concret, comme Vector<T>
, votre valeur de retour peut être passé dans une méthode qui prend un Serializable
, Cloneable
, Iterable<T>
, Collection<T>
, List<T>
, RandomAccess
, Vector<T>
, AbstractList<T>
, ou AbstractCollection<T>
, et cela fonctionnera comme prévu.