添加新记录时错误更新ArrayList记录

时间:2012-07-09 09:18:54

标签: java arraylist

我正在尝试创建一个任务表并操纵其内容。我正在处理一个我不理解的错误,非常感谢你的帮助。我试着提问问题的长度,但试图尽可能多地提供细节。

tasksRepository 将记录(在 taskDef 类中构建)存储为数组列表。 setTask ()和 getTask 方法包含ArrayList类的add()和get()方法。

taskDef 对象的参数是使用本地set方法创建的。以下是此类方法的示例:如果传递的参数与存储的值不同,则将存储值,并将事件添加到日志记录中。在任何情况下都会重新调整成功标志。

public static Boolean setProjectNumber(String projectNumberI)
{ // All the 
    if (projectNumberI != projectNumber)
    {
        projectNumber = projectNumberI;
        logAccumulator = logAccumulator + "; project number (" + projectNumberI + ")";
    }
    return true;
}

private static void setLog ()
{ // When all the parameters are set, the log parameter is updated with time tag
    String t = formatterFull.format(GregorianCalendar.getInstance().getTime());
    log = log + "\n" + t + ": " + logAccumulator;       
}

tasksTableProcessing 包含任务操作。以下包含构造函数。它是以一种更简单的形式开始的,但在调查期间我改变了它。类 taskStatus 是ENUM,它返回字符串。方法 getLog ()只返回日志字段

public tasksTableProcessing () 
{ // constructor. Creates the tableRepository object with test records
    tasksRepository.clearDb ();

    taskDef task = null; 
    task = new taskDef ("P1000", "O1", taskStatus.started (), "1", "false", "false");
    tasksRepository.addTask (task);
    System.out.println("\nLog 0: \n" + tasksRepository.getTask(0).getLog());

    task = null;
    task = new taskDef ("P1000", "O1", taskStatus.started(), "2", "false", "true");
    tasksRepository.addTask (task);
    System.out.println("\nLog 1: \n" + tasksRepository.getTask(1).getLog());

    task = null;
    task = new taskDef ("P2000", "O2", "closed", "63", "true", "false");
    tasksRepository.addTask (task);
    System.out.println("\nLog 2: \n" + tasksRepository.getTask(2).getLog());

    task = null;
    task = new taskDef ("P2000", "O2", "closed", "64", "true", "true");
    tasksRepository.addTask (task);
    System.out.println("\nLog 3: \n" + tasksRepository.getTask(3).getLog());
}

以下是日志。它表明,当引入新记录时,所有旧记录都会更新。

  
    

记录0:

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动)

         

记录1:

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动)

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动);任务(任务2);任务ID(2);交货旗帜(真)

         

记录2:

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动)

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动);任务(任务2);任务ID(2);交货旗帜(真)

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动);任务(任务2);任务ID(2);交货旗帜(真);项目编号(P2000);任务(任务63);任务ID(63);所有者(O2);状态(已结束);关键路径(真实);交付标志(虚假)

         

记录3:

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动)

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动);任务(任务2);任务ID(2);交货旗帜(真)

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动);任务(任务2);任务ID(2);交货旗帜(真);项目编号(P2000);任务(任务63);任务ID(63);所有者(O2);状态(已结束);关键路径(真实);交付标志(虚假)

         

09/07/2012 10:21 :;项目编号(P1000);任务(任务1);任务ID(1);所有者(O1);状态(已启动);任务(任务2);任务ID(2);交货旗帜(真);项目编号(P2000);任务(任务63);任务ID(63);所有者(O2);状态(已结束);关键路径(真实);交货旗帜(假);任务(任务64);任务ID(64);交货旗帜(真)

  

1 个答案:

答案 0 :(得分:1)

给定方法签名,您将TaskDefs的成员存储为静态字段,而不是实例字段。静态字段是TaskDef类本身的字段,而不是特定TaskDef实例的字段。

阅读有关instance and class members

的Java教程