Возможно, вы слышали экстраполяцию закона Постеля : «Будь консервативным в том, что ты посылаешь, либеральным в том, что ты принимаешь».
В основном речь идет о максимизации повторного использования кода. Легко придумать случаи, чтобы продемонстрировать, почему это помогает. Рассмотрим Java Iterable<T>
в качестве примера. Если единственное, что делает ваш метод, это перебирает все T
s, то в Iterable<T>
качестве типа параметра можно использовать этот метод с более чем 60 встроенными классами, не говоря уже о каких-либо пользовательских классах, которые реализуют интерфейс. Если вы ограничите его, скажем,, Vector<T>
то любой код, который вызывает ваш метод, должен был бы быть преобразован в Vector<T>
первый.
С другой стороны, возвращаясьIterable<T>
из метода ограничивает объем кода , который может использовать ваше возвращаемое значение тем , что принимает Iterable<T>
параметр. Если вы возвращаете очень конкретный тип, как Vector<T>
, то ваше возвращение значение может быть передано в любой метод , который принимает Serializable
, Cloneable
, Iterable<T>
, Collection<T>
, List<T>
, RandomAccess
, Vector<T>
, AbstractList<T>
, или AbstractCollection<T>
, и он будет работать , как ожидалось.