Podría escucharse una extrapolación de la ley de Postel : "Sea conservador en lo que envía, liberal en lo que acepta".
Principalmente se trata de maximizar la reutilización del código. Es fácil encontrar casos para demostrar por qué ayuda. Considere Java Iterable<T>
como ejemplo. Si lo único que hace su método es iterar a través de todos los T
s, tener un Iterable<T>
tipo de parámetro como le permite usar ese método con más de 60 clases incorporadas, sin mencionar las clases personalizadas que implementan la interfaz. Si lo limita a, digamos, Vector<T>
entonces cualquier código que llame a su método tendría que convertirse a un Vector<T>
primero.
Por otro lado, devolver un Iterable<T>
método a partir de un método limita la cantidad de código que puede usar su valor de retorno a aquellos que toman un Iterable<T>
parámetro. Si devuelve un tipo muy concreto, como Vector<T>
, a continuación, su valor de retorno se puede pasar a cualquier método que toma una Serializable
, Cloneable
, Iterable<T>
, Collection<T>
, List<T>
, RandomAccess
, Vector<T>
, AbstractList<T>
, o AbstractCollection<T>
, y funcionará como se espera.