错误 saving/allocation/setting 个变量
Wrong saving/allocation/setting of variables
我的代码有问题,我没有发现错误,一定是小问题。
// This list is filled with Objects of Matcher
ArrayList<Matcher > fullListForBundle = new ArrayList<>();
// making a new ArrayList
ArrayList<Matcher> bundlelist = new ArrayList<>();
// making a new object
Matcher currentBundle = new Matcher();
// Searching trough an Arraylist of Objects.
for (Matcher current : stockDataCompleteWithBundle)
{
// Get an Identifier
String han = current.getThirdColumn();
// Search through an other list to match identifier
for (int i = 0; i < fullListForBundle.size(); i++)
{
// If identifier matches then do:
if (fullListForBundle.get(i).getFifteenthColumn().equals(han))
{
// I want to get the right object and save it in currentBundle
currentBundle = fullListForBundle.get(i);
// !!! Here begins my problem !!!
// Then I want to change two Strings in that particular Object
currentBundle.setFirstColumn(current.getFirstColumn());
currentBundle.setThirteenthColumn(current.getSecondColumn());
// And add that object to a new Arraylist
bundlelist.add(currentBundle);
}
}
}
我的问题是:通过设置 firstColumn 和 thirteenthColumn,更改了 fullListBundle.get(i) 对象中的数据,而不是 currentBundle 对象中的数据。我错过了什么?
这是因为您使用的是同一个对象。您需要获取一个克隆对象并进行更改。
currentBundle = fullListForBundle.get(i).clone()
当你这样做时,
currentBundle = fullListForBundle.get(i);
currentBundle
和 fullListForBundle.get(i)
都引用了堆中的同一个对象。您应该看到两者的结果相同。如果您只是想让 currentBundle
尝试更改,
currentBundle = fullListForBundle.get(i).clone();
编辑:Object.clone()
方法具有 protected
访问权限,这意味着它对同一包中的子 类 和 类 可见。
最好有一个复制构造函数来手动复制对象。
/**
Deep copy all the information from other to this
*/
public Matcher(Matcher other) {
this.id = other.id;
}
我的代码有问题,我没有发现错误,一定是小问题。
// This list is filled with Objects of Matcher
ArrayList<Matcher > fullListForBundle = new ArrayList<>();
// making a new ArrayList
ArrayList<Matcher> bundlelist = new ArrayList<>();
// making a new object
Matcher currentBundle = new Matcher();
// Searching trough an Arraylist of Objects.
for (Matcher current : stockDataCompleteWithBundle)
{
// Get an Identifier
String han = current.getThirdColumn();
// Search through an other list to match identifier
for (int i = 0; i < fullListForBundle.size(); i++)
{
// If identifier matches then do:
if (fullListForBundle.get(i).getFifteenthColumn().equals(han))
{
// I want to get the right object and save it in currentBundle
currentBundle = fullListForBundle.get(i);
// !!! Here begins my problem !!!
// Then I want to change two Strings in that particular Object
currentBundle.setFirstColumn(current.getFirstColumn());
currentBundle.setThirteenthColumn(current.getSecondColumn());
// And add that object to a new Arraylist
bundlelist.add(currentBundle);
}
}
}
我的问题是:通过设置 firstColumn 和 thirteenthColumn,更改了 fullListBundle.get(i) 对象中的数据,而不是 currentBundle 对象中的数据。我错过了什么?
这是因为您使用的是同一个对象。您需要获取一个克隆对象并进行更改。
currentBundle = fullListForBundle.get(i).clone()
当你这样做时,
currentBundle = fullListForBundle.get(i);
currentBundle
和 fullListForBundle.get(i)
都引用了堆中的同一个对象。您应该看到两者的结果相同。如果您只是想让 currentBundle
尝试更改,
currentBundle = fullListForBundle.get(i).clone();
编辑:Object.clone()
方法具有 protected
访问权限,这意味着它对同一包中的子 类 和 类 可见。
最好有一个复制构造函数来手动复制对象。
/**
Deep copy all the information from other to this
*/
public Matcher(Matcher other) {
this.id = other.id;
}