Создание глубокой копии списка - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь создать глубокую копию списка, но все время получаю сообщение об ошибке, что новый список пуст <<]> даже после того, как все пытаются скопировать исходный список.

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

public class OwnedPiggyBank 
{
    List<Coin> bank;
    private Owner owner;


    public OwnedPiggyBank(Owner owner) 
    {
        this.owner = owner;
        bank = new ArrayList<>();
    }

    public void add(List<Coin> coins) 
    {
        bank.addAll(coins);
    }

    public List<Coin> deepCopy() 
    {
        List<Coin> coins = new ArrayList<>();

        for (Coin c : bank)
        {
            coins.add(new Coin(c));
        }

        return coins;
    }

... где тестовый пример, связанный с этим:

public void test() 
{
    OwnedPiggyBank b = new OwnedPiggyBank("Lola");
    List<Coin> coins = new ArrayList<Coin>(Arrays.asList(Coin.PENNY, Coin.LOONIE, Coin.TOONIE));
    b.add(coins);
    OwnedPiggyBank c = new OwnedPiggyBank(b);
    assertEquals(coins, c.deepCopy());
}

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

У OwnedPiggyBank, по-видимому, нет конструктора, который принимает другой OwnedPiggyBank, как он вызывается в 4-й инструкции письменного тестового примера. Добавление конструктора, как показано ниже, должно решить проблему.

OwnedPiggyBank(OwnedPiggyBank ob){
   this.owner = ob.owner;
   this.bank = ob.deepCopy();
}
0 голосов
/ 31 октября 2018

В вашем конструкторе public OwnedPiggyBank(Owner owner) у вас есть

bank = new ArrayList<>();

так, конечно, в deepCopy bank это empty

assertEquals(coins, b.deepCopy());

имеет больше смысла

Если вы хотите сохранить дело test, вам нужно сделать что-то вроде

public OwnedPiggyBank(OwnedPiggyBank owner) 
{
    this.owner = owner;
    bank = owner.deepCopy();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...