Он не встроен в язык, потому что не существует разумной реализации по умолчанию .
Копирующие конструкторы страдают от той же неопределенности, что и клонирование . Например, хотите ли вы сделать мелкую или глубокую копию, зависит от ваших конкретных обстоятельств.
Допустим, у вас есть класс Order
со свойством Customer
. Должен ли его конструктор копирования создать нового клиента или указать исходный экземпляр? Вероятно, оригинальный экземпляр - но как насчет Order.Payment
?
Хуже того, даже если вы do хотите выполнить глубокое копирование, вы, возможно, даже не сможете создать все подчиненные объекты, поскольку их конструкторы (или сопоставимые фабричные методы) могут быть недоступны.
В случае, если этого недостаточно, эта статья о проблемах проектирования Java освещает некоторые другие проблемы (например, усечение типа).