Если ваш метод клонирования возвращает this
экземпляр, а не отдельный объект, тогда это не клон, не так ли?
Javadoc говорит:
По соглашению, объект возвращается
этот метод должен быть независимым от
этот объект (который клонируется).
Перечисления не должны быть клонированы, потому что предполагается, что когда-либо будет только один экземпляр каждого значения.
РЕДАКТИРОВАТЬ: В ответ на следующий комментарий:
Это именно то, что я критикую. Зачем
не вернуть тот же экземпляр, если есть
не может быть другим?
Потому что это не имеет смысла. Если это тот же объект, то это не клон. Javadocs также говорят:
Общее намерение таково, что для любого
объект х, выражение:
x.clone() != x
будет правдой, и что
выражение:
x.clone().getClass() == x.getClass()
будет правдой, но эти
не являются абсолютными требованиями.
Таким образом, метод clone()
предназначен для возврата отдельного объекта. К сожалению, это говорит о том, что это не абсолютное требование, которое делает ваше предложение действительным, но я все еще думаю, что это не имеет смысла, потому что бесполезно иметь метод клона, который возвращает this
. Это может даже вызвать проблемы, если вы делаете что-то сомнительное, например, изменяющееся состояние в константах перечисления или синхронизацию с ними. Поведение такого кода будет различным в зависимости от того, правильно ли клонировал метод клонирования или только что вернул this
.
Вы на самом деле не объясняете, почему вы хотите относиться к перечислениям как Cloneable
, когда они изначально не клонируются. Желание иметь метод клонирования, который не подчиняется принятым соглашениям, кажется хаком для решения более фундаментальной проблемы с вашим подходом.