ArrayList未正确填充

时间:2014-12-12 06:05:15

标签: java eclipse list arraylist

这是我的清单:

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时,它只用一个值填充所有列表。 我该如何解决这个问题?

2 个答案:

答案 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());


     }