Можливо, ви почули екстраполяцію закону Постеля : "Будьте консервативними в тому, що ви надсилаєте, ліберальним у тому, що ви приймаєте".
Переважно йдеться про максимальне використання коду. Легко придумати випадки, щоб продемонструвати, чому це допомагає. Розглянемо Iterable<T>
приклади Java . Якщо єдиним вашим методом є ітерація всіх 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>
, і він буде працювати , як очікувалося.