这是我的清单:
List<JiraProjectDetails> projlist = new ArrayList<JiraProjectDetails>();
我希望通过以下代码填写此列表:
JiraProjectDetails jiraProj = new JiraProjectDetails();
JiraTasks jiraObj = new JiraTasks(glb.getSysProps().getProperty("JIRA_SOAP_USER"),
glb.getSysProps().getProperty("JIRA_SOAP_USER_PWD"),
glb.getSysProps().getProperty("JIRA_BASE_URL"));
RemoteProject r[] = jiraObj.getJiraProjects();
if (r != null){
for (int i = 0; i < r.length; i++) {
jiraProj.setProjectID(r[i].getId());
jiraProj.setProjectDesc(r[i].getDescription());
jiraProj.setProjectKey(r[i].getKey());
jiraProj.setProjectName(r[i].getName());
jiraProj.setURL(r[i].getUrl());
projlist.add(i,jiraProj);
System.out.println("Jira Projects in loop: " + r[i].getName());
}
}
现在,我在jiraProj
中设置的值是正确的,但是当我通过add函数填充projlist
时,它只用一个值填充所有列表。
我该如何解决这个问题?
答案 0 :(得分:4)
您必须在循环的每次迭代中创建一个新的JiraProjectDetails
实例。
if(r!=null){
for (int i = 0; i < r.length; i++) {
JiraProjectDetails jiraProj = new JiraProjectDetails();
jiraProj.setProjectID(r[i].getId());
jiraProj.setProjectDesc(r[i].getDescription());
jiraProj.setProjectKey(r[i].getKey());
jiraProj.setProjectName(r[i].getName());
jiraProj.setURL(r[i].getUrl());
projlist.add(i,jiraProj);
System.out.println("Jira Projects in loop: " + r[i].getName());
}
否则,您将反复更改同一对象的属性,并且由于同一对象一次又一次地添加到列表中,因此列表中的所有元素将具有相同的值。
答案 1 :(得分:1)
在循环内部而不是在循环外部创建JiraProjectDetails jiraProj = new JiraProjectDetails();
的新实例。
JiraProjectDetails jiraProj = null;
JiraTasks jiraObj = new JiraTasks(glb.getSysProps().getProperty("JIRA_SOAP_USER"),glb.getSysProps().getProperty("JIRA_SOAP_USER_PWD"),glb.getSysProps().getProperty("JIRA_BASE_URL"));
RemoteProject r[] = jiraObj.getJiraProjects();
if(r!=null){
for (int i = 0; i < r.length; i++) {
jiraProj = new JiraProjectDetails();
jiraProj.setProjectID(r[i].getId());
jiraProj.setProjectDesc(r[i].getDescription());
jiraProj.setProjectKey(r[i].getKey());
jiraProj.setProjectName(r[i].getName());
jiraProj.setURL(r[i].getUrl());
projlist.add(i,jiraProj);
System.out.println("Jira Projects in loop: " + r[i].getName());
}