В Java 5 были введены обобщения, и они были добавлены ко многим интерфейсам в пакете java.lang
. Однако Cloneable
не получал дженерики. Интересно, почему?
Изменить: В ответ на ответы @Jon и @litb и комментарий @Earwicker я думал, что Cloneable
может быть:
public interface Cloneable<T> {
public T clone();
}
Здесь T clone();
переопределяет Object.clone()
, давая ему ковариантный тип. Я считаю, что это все равно будет обратно совместимым и повысит безопасность типов. Так почему бы и нет?
Изменить 2: Как видно из ответов (и комментариев) ниже, предлагаемый выше интерфейс нарушит совместимость с обратной связью. Поскольку Object.clone()
является protected
, переписывание его в интерфейсе заставит всех разработчиков реализовать реализацию public
, которую разработчики классов могут не захотеть (т.е. Они могут оставить его protected
).