在对另一个对象执行某些操作时,当前对象的属性值会更改

时间:2017-08-06 11:03:26

标签: java oop junit

我正在研究一些简单的java程序,我遇到了这个问题: 我是一个代表帐号的卡片类,我正在尝试使用以下方法获取所有其他帐号:getValidCards给出数字(有9个数字)

方法:getAlternativeNumbers是Number类中的一个方法,它计算单个替代数字。 在我的班级考试中,我打电话给

Assert.assertEquals(cardToTest.getValidCards(),"899999999");

班级卡:

private List<Number> numbers;

public String getValidCards(){
    List<Card> toReturn = new ArrayList<>();
    Card accountNumber;
    for(int index=0 ; index < 9 ; index ++){
        accountNumber = new Card(numbers);
        List<number> alternatives = accountNumber.numbers.get(index).getAlternativeNumbers();
        for(int j=0 ; j < alternatives.size(); j++){
            accountNumber.replace(index, alternatives.get(j));
            if(accountNumber.isValid()){
                toReturn.add(accountNumber);
            }
        }
    }
    return printFinalListOfNumbers(toReturn);
}

我的问题是:替换方法:

private void replace(int index ,Number number){
    numbers.set(index,number);
}

这是在数字属性上进行更改,当我初始化 accountNumber = new Card(数字); 时,它会记录已更改的数字,但是我正在更改对象AccountNumber的数量,而不是我在测试中从中调用对象的数字:card.getValidDigits();

如果有人知道答案,请帮助..

1 个答案:

答案 0 :(得分:1)

使Card构造函数复制传入的参数,例如

public Card(List<Number> numbers) {
    this.numbers = new ArrayList<>(numbers);
}

这样,内部numbers将是一个单独的副本,其内容与创建时相同。