Почему компаратор реализует Serializable?

Новое в Java. Изучайте его во время работы над Android-приложением. Я реализую Comparator для сортировки списка файлов, и в документах android говорится, что компаратор должен реализовать Serializable:

Рекомендуется, чтобы компаратор реализовал Serializable.

Это интерфейс Serializable.

Я просто хочу отсортировать список файлов. Почему я должен реализовать это или что даже является причиной, почему это должно быть для любого компаратора?

Solutions Collecting From Web of "Почему компаратор реализует Serializable?"

Это не просто Android, Java SDK имеет ту же рекомендацию :

Примечание. Как правило, хорошей идеей для компараторов также является реализация java.io.Serializable, поскольку они могут использоваться в качестве методов упорядочения в сериализуемых структурах данных (например, TreeSet, TreeMap). Чтобы структура данных была успешно сериализована, компаратор (если предоставлен) должен реализовать Serializable.

Таким образом, идея состоит в том, что, поскольку TreeMap является сериализуемым, и TreeMap может содержать Comparator, было бы неплохо, если бы Компаратор был также сериализуемым. То же самое относится ко всем элементам коллекции.

Вы можете смело игнорировать это, если не используете сериализацию таким образом.

Это должно помочь вам: http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

Примечание. Обычно для компараторов рекомендуется реализовать java.io.Serializable, поскольку они могут использоваться в качестве методов упорядочения в сериализуемых структурах данных (например, TreeSet, TreeMap). Чтобы структура данных была успешно сериализована, компаратор (если предоставлен) должен реализовать Serializable.

Сериализуемый – пустой интерфейс. Он не содержит никаких методов. Итак, чтобы реализовать его, все, что вам нужно сказать, – это implements Serializable в классе. Это не огромная нагрузка на вас. Если вы расширяете Comparator , вам даже не нужно реализовывать Serializable потому что суперкласс делает это для вас, а затем вам не нужно ничего делать для реализации Serializable .

Когда что-то реализует Serializable , это означает, что объект может быть превращен в массив байтов по желанию. Это используется для передачи через Интернет, хранения в файле и т. Д. Говоря очень грубо, способ сериализации для объекта по умолчанию заключается в том, чтобы взять каждый объект, на который ссылается объект, который вы пытаетесь сериализовать, Объект в массив байтов (т. Е. Вызывать сериализацию на нем рекурсивно) и конкатенировать массивы байтов для создания массива байтов, который представляет общий объект.

Теперь, почему Comparator реализует Serializable ? Предположим, вы хотите сериализовать TreeMap или другую упорядоченную Collection . Целью сериализации является предоставление полного представления объекта. Коллекции, такие как TreeMap имеют в них объект Comparator , поэтому, чтобы иметь возможность создавать массив байтов, который захватывает каждый аспект таких коллекций, вам нужно также сохранить Comparator как массив байтов. Следовательно, Comparator должен быть Serializable чтобы другие вещи могли быть правильно сериализованы.

Для сериализации объекта в Java оба условия должны быть выполнены:

  1. Класс, к которому принадлежит экземпляр, должен реализовать java.io.Serializable.
  2. Члены класса должны быть сериализованы. Если один или несколько членов не должны быть сериализованы, они должны быть отмечены как временные.

Когда какая-либо структура данных использует Компаратор и вы хотите, чтобы структура данных была сериализуемой, точка 2 (упомянутая выше) заставляет компаратор реализовывать сериализуемые.

Я видел в Java 5 API Ссылка на java 5 APT, в котором говорилось, что реализация Compator не означает, что в любом случае реализовать интерфейс Serializable, поэтому нужно явно обратить внимание на получение Serializable в некотором обычно создаваемом классе Comparator