Почему Java не предоставляет конструктор копирования по умолчанию?

Вам нужно перезаписать часть fluid_styled_content в Resources/Private/Partials/Media/Gallery.html.

Как переписать, вы можете прочитать здесь: https://docs.typo3.org/typo3cms/extensions/ fluid_styled_content / 8.7 / Конфигурация / OverridingFluidTemplates / [/ д2]

-4
задан tryman 23 January 2019 в 08:43
поделиться

2 ответа

Но это так. Этот метод называется clone() и реализован в классе Object.

То, что вы хотите сделать, может быть достигнуто с помощью следующего:

MyClass obj = new MyClass(); 
MyClass copy = (MyClass) obj.clone();
0
ответ дан P. Soutzikevich 23 January 2019 в 08:43
поделиться

Что-нибудь мешает Java создать неявный конструктор копирования, который вызовет конструктор копирования для всех членов?

Главным образом тот факт, что это не то, что он должен делать.

Может быть, вы хотите глубокую копию в этом случае; может быть, вы хотите мелкую копию в этом случае; возможно, вы не хотите, чтобы экземпляры вообще копировались в другом случае; может быть, вы хотите, чтобы поля определенного класса копировались разными способами.

Кроме того, добавление этого конструктора является еще одним методом: в средах, где важно количество методов (например, ограничение Android Dex в 64 тыс.), Вы платите за то, что вам не нужно.

Лучше позволить вам сделать это, если вам это нужно, сделав это явным.


Но что мешает Java иметь это?

Учитывая, что вы можете определить конструктор копирования вручную, технически целесообразно добавить их автоматически.

Я полагаю, что причина, по которой вы не могли этого сделать, заключается в том, что не существует языкового механизма для «удаления» конструктора для классов, которые вы не хотите копировать.

Легко указать, что вам не нужен ctor по умолчанию: просто определите свой ctor с любой подписью. Но вы не могли бы сделать то же самое с копирующим ctor по умолчанию: по определению копирующий ctor всегда будет иметь только подпись YourClass(YourClass instance); таким образом, вы не можете требовать, скажем, чтобы вы определили явный ctor копирования, который выдает, потому что тогда вы изменили ошибку времени компиляции (такой ctor не существует) на ошибку времени выполнения (она существует, но выдает).

Итак, вы должны начать изобретать дополнительные механизмы для удаления конструктора - скажем, специальную аннотацию. Но тогда это требует изменений в инструментах для его поддержки.

Это не невозможно в абсолютном смысле - но потребуется много работы, чтобы изменить язык, чтобы добавить функцию, которая может быть реализована в существующем языке.

0
ответ дан Andy Turner 23 January 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: