Допустим, у меня есть статичное множество, в который в будущем я не намерен добавлять ещё элементы. Стоит ли мне в таком случае предпочесть использовать интерфейс Iterable вместо интерфейса Set?
Этот вопрос у меня возник после того, как увидел, что в исходном коде Google Guava (на Github) использовано вместо интерфейса Set интерфейс Iterable.
Я заметил, что для использования Iterable её не надо напрямую импортировать, а для Set — нужен импорт.
Какие преимущества даёт использование Iterable вместо Set?
Ты любишь по старине проехаться. Гугл сначала написал говнаво, потом долждался Java 8, потом понял что яву уже ничем не спасти и перешли на скотлин и судится с бесплатной явой на миллиарды Ну Iterable это одно а Set совсем совсем другое
Те, кто пишут библиотеки, используют в качестве параметров методов самые общие интерфейсы/классы, которые позволяет реализация метода. Для того, чтобы Вы, как пользователь библиотеки, не задумывались над тем, что ваш Set нужно превратить в List или Collection, чтобы передать в гуаву. Вы можете использовать все, что душе угодно и одинаково передавать в методы либы. Т. к. там внутри метода, разработчики либы предусмотрели это и им неважно, что вы по факту передадите - Set, List, Collection, ArrayList, LinkedList, HashSet, TreeSet и т. д. Им достаточно перечисления.
Но использовать Iterable в качестве типа переменных в своем коде? Зачем? Нафига себя так ограничивать-то. Что вы с этим одним методом перечисления делать будете?
Отличаются они логикой использования. Если нужно только перебирать элементы - используется Iterable, если нужна неповторяемость элементов со всеми вытекающими - используется Set, который имеет в том числе функциональность Iterable.