Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对另一个对象执行某些操作时,当前对象的属性值会发生更改_Java_Oop_Junit - Fatal编程技术网

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

Java 对另一个对象执行某些操作时,当前对象的属性值会发生更改,java,oop,junit,Java,Oop,Junit,我正在开发一些简单的java程序,我面临着这个问题: 我有一个代表帐号的card类,我正在尝试使用以下方法获取所有可选帐号:getValidCards givennumbers(其中有9个号码) 方法:getAlternativeNumbers是Number类中计算单个可选数字的方法。 在我的班级考试中,我打电话给 Assert.assertEquals(cardToTest.getValidCards(),"899999999"); 班级卡: private List<Number&g

我正在开发一些简单的java程序,我面临着这个问题: 我有一个代表帐号的card类,我正在尝试使用以下方法获取所有可选帐号:getValidCards givennumbers(其中有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);
}
当我初始化accountNumber=新卡(数字)时,这是对属性数字进行操作的;它使用的是已更改的数字,但我更改的是对象AccountNumber的数字,而不是我在测试中调用的对象的数字:card.getValidGits()


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

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

public Card(List<Number> numbers) {
    this.numbers = new ArrayList<>(numbers);
}
公共卡(列表编号){
this.numbers=新的数组列表(numbers);
}

这样,内部的
编号
将是一个单独的副本,其内容与创建期间相同。

您有一个由多个
卡片
对象共享的可变
编号
列表。如果你像这样修改它,数字当然会改变。数字不是真正共享的,当我创建一个以数字为参数的新对象时,就好像我创建了一个不共享的新数字,它不是卡的相同数字,不是吗?当然不是。仅仅通过传递参数并不能神奇地创建新对象。它只是对传递的原始单个列表的引用,因此所有
对象都共享相同的
编号
。显然它是共享的。如果你不这么认为,请提供你认为实现非共享语义的代码。好吧,我理解,对数字的引用,我不认为它会像这样运行,你认为我的解决方案是什么,让新卡对象引用另一个数字,而不影响原来的数字?
public Card(List<Number> numbers) {
    this.numbers = new ArrayList<>(numbers);
}