Когда необходимо использовать инструменты Iterable <T> - PullRequest
1 голос
/ 21 мая 2019

Я пишу универсальный класс SortedGroup, чтобы универсальный тип implements Comparable<T>.Подпись класса

public class SortedGroup<T extends Comparable<T>>.

Мне нужно написать метод, который возвращает итератор универсального типа.

Вопрос:

Есть ли необходимость писать сигнатуру класса с помощью реализаций Iterable, таких как:

public class SortedGroup<T extends Comparable<T>> implements Iterable<T>

или я могу написать это без implements Iterable<T>?

Это не ясномне, потому что я не получаю никаких ошибок при записи с или без

implements Iterable<T>.

EDIT: Класс использует ArrayList для хранения данных.Поэтому я использую его метод итератора.

Правильно ли написан метод ниже?

public Iterator<T> iterator()
{
    return list.iterator();
}

1 Ответ

1 голос
/ 21 мая 2019

Простой: если вы хотите, чтобы ваша «коллекция» могла быть зациклена так же, как и любая другая стандартная коллекция Java, вам лучше иметь implements Iterable<T> в вашем классе.

Смысл в том, чтобы иметь этот интерфейспозволяет пользователям делать это:

for (Bar foo : someSortedGroupOfBars) {

Другими словами: только когда вы абсолютно уверены, что ваши группы никогда не будут повторяться с использованием "стандартных" шаблонов Java, тогда вы не решите реализоватьэтот интерфейс при реализации своего рода «контейнера».

Вы можете даже пойти еще дальше и решить, имеет ли смысл реализация Collection или еще более специализированный интерфейс, такой как List!Это, конечно, требует от вас реализации большего количества методов (которые все-таки имеют смысл для «группового контейнера» imho).

Помимо этого, это в основном зависит от вашего контекста.Если вы пишете этот класс для очень конкретной задачи (например, школьного упражнения), то: напишите минимальный объем кода, который делает то, что вам нужно.Тогда может быть правильным не реализовать интерфейс, который вам не нужен.Но как только этот класс должен существовать для «большего», реализация интерфейса - очень естественная и прямолинейная идея.

И, отвечая на другой вопрос, заданный: «делегирование» итератору базового ArrayList является правильным подходом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...