Member 13228896 Ответов: 3

Как создать копию объекта


Я хочу скопировать колоду карт, которая является объектом;
ниже приведен мой код для этого, но я получаю это исключение ошибки в потоке" main " java.lang.StackOverflowError, когда я его запускаю. как же мне хочется взять пачку и вернуть ее.

Что я уже пробовал:

<pre>public class Pack {

    /**
     * a list of cards
     */
    private Element myCards;

 public Pack copy() {
        if(this.myCards==null){
            return null;
        }else{
         
         Pack pack= (Pack) this.copy();
         return pack;
           
         }
            
        }

3 Ответов

Рейтинг:
2

MattTelles

ГМ, посмотри, что ты здесь делаешь:

Pack copy() {
         Pack pack= (Pack) this.copy();
         return pack;


Это вызов того же метода, в котором вы находитесь (рекурсия). Без выхода это приведет к смерти, и вы получите переполнение стека.

То, что вы хотите, это:

Пакет p = новый пакет();
p. myCards = / / сделайте копию mycards здесь.
возвращение п;


Member 13228896

Я только что использовал этот метод, но я получаю пакет ошибок не может быть преобразован в элемент, myCards-это элемент.

Рейтинг:
2

Mehdi Gholam

Попробуйте глубоко скопировать ваш объект, смотрите это : JavaTechniques " более быстрые глубокие копии объектов Java[^]


Рейтинг:
2

Patrice T

Ваш copy метод не делает ничего, кроме Бесконечного вызова самого себя.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.