мне нужно оборудовать свой класс с полиморфной вегетативно (глубокая копия), то есть мне нужно что-то вроде этого, чтобы работать:Является ли метод clone() Java единственным способом достижения полиморфного клонирования?
SuperType original = new SubType();
SuperType copy = original.clone();
где original.clone()
может быть заменен любым механизмом, чтобы создать глубокую копию, а фактический тип от copy
должно быть SubType
, потому что original
также является SubType
.
Способ clone()
и интерфейс Cloneable
- единственный способ достичь этого? Фабричные методы и конструкторы копирования не могут использоваться, так как фактический класс известен только во время выполнения, правильно? Существуют ли какие-либо другие предлагаемые методы, кроме методов сериализации-десериализации, и Java deep-cloning library, который ИМХО даже хуже черной магии, чем метод clone()
?
Спасибо, Петр
Вы не можете создать конструктор, чтобы объект, который вы хотите клонировать, можно передать? – Justin
@gangqinlaohu Конечно, я могу, но тогда мне нужно будет вызвать 'новый SubType (оригинал)', который я не могу, так как не знаю во время написания кода, если оригинал на самом деле принадлежит классу 'SubType' или' SubType2' , или 'SubSubType'. – Posa