Интерфейс Collection — это абстрактное представление групп объектов и не расширяет интерфейсы Cloneable или Serializable. Это решение отражает принцип, что абстрактные интерфейсы не должны навязывать конкретные детали реализации.
Не все реализации коллекций нормально поддерживают клонирование. Хотя многие конкретные коллекции вроде ArrayList и HashMap реализуют Cloneable, другие могут этого не делать. Требование клонирования на уровне интерфейса заставило бы все реализации это поддерживать, даже когда:
Аналогично, требования к сериализации сильно различаются в разных реализациях. Некоторые коллекции нуждаются в специальной логике сериализации, а другие вообще могут быть несериализуемыми — в зависимости от:
Оставляя эти решения на усмотрение конкретных реализаций, дизайн обеспечивает максимальную гибкость. Каждый класс реализации может:
Cloneable или Serializable только там, где это действительно нужноКогда работаешь с коллекциями, стоит явно проверять, что конкретная реализация (например, ArrayList, LinkedList) поддерживает клонирование или сериализацию, прежде чем полагаться на эти возможности. Такой подход заставляет разработчиков принимать осознанные решения вместо того, чтобы случайно наследовать нежелательное поведение от родительского интерфейса.
Интерфейс Collection не расширяет Cloneable, потому что требование от всех реализаций поддерживать клонирование заставило бы классы реализовать его даже когда операция не имеет семантического смысла или неэффективна по производительности.
Новый — ещё не проверен сообществом
Вы