Я читал это answer, и он упомянул link, где автор объясняет, почему мы не должны использовать Cloneable. Но, по-прежнему есть сомнения, что было сказано тамCopy Constructor vs Cloneable. Почему я не должен рассматривать Cloneable?
Если у меня есть массив Cloneable, вы могли бы подумать, что я мог бы бежать вниз этот массив и клонировать каждый элемент, чтобы сделать глубокую копию массива, но я не может. Вы не можете наложить что-то на Cloneable и вызвать метод clone , потому что Cloneable не имеет общедоступного метода клонирования и также не Object. Если вы попытаетесь применить к Cloneable и вызовите метод clone , компилятор скажет, что вы пытаетесь вызвать метод защищенного клонирования на объекте.
Но здесь я
Init s = Init.getInstance(); // getting instance
int count=0;
Cloneable[] v = new Cloneable[5]; // creating array
Init x = s;
Init y = new Init(s);
try {
while (count < 5) {
v[count++] = (Cloneable) s.clone(); // casting it.
}
s.setClassName("Example");
System.out.println(((Init) v[2]).getClassName()); // Displaying.
} catch (CloneNotSupportedException ex) {
ex.printStackTrace();
}
я смог создать Cloneable массив, и я сделал то, что сказал автор вызовет ошибку или я неправильно понял автор заявление? Кто-нибудь, пожалуйста, помогите мне понять причину выбора Copy Constructor over Cloneable.
Я .net разработчик, но упс концепции похожи на Java анс C# .Как в моей understan ding В Copy Constructor ссылка на память одинакова для объекта как реального, так и скопированного. Поэтому, когда вы меняете значение реального объекта, вы увидите, что он также влияет на скопированный объект. На клонируемых объектах оба имеют различную память, они не зависели, они не влияли друг на друга. –