首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加新记录时ArrayList记录的错误更新

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

Stack Overflow用户
提问于 2012-07-09 09:18:54
回答 1查看 157关注 0票数 0

我试图创建一个任务表并操作其内容。我正在处理一个我不明白的bug,非常感谢你的帮助。我对这个问题的篇幅表示赞赏,但试图尽可能多地介绍细节。

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

taskDef对象的参数是使用本地集合方法创建的。下面是这种方法的一个示例:如果传递的参数与存储的值不同,它将是存储值,并且事件将被添加到日志记录中。在任何情况下,都会重新设置成功标志。

代码语言:javascript
复制
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 ()只返回日志字段

代码语言:javascript
复制
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);交付标志(true) 日志2: 09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID (1);所有者(O1);状态(已启动) 09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID (1);所有者(O1);状态(已启动);任务(任务2);任务ID (2);交付标志(true) 09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID (1);所有者(O1);状态(已启动);任务(任务2);任务ID (2);交付标志(true);项目编号(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);交付标志(true) 09/07/2012 10:21:;项目编号(P1000);任务(任务1);任务ID (1);所有者(O1);状态(已启动);任务(任务2);任务ID (2);交付标志(true);项目编号(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);交付标志(真)

EN

回答 1

Stack Overflow用户

发布于 2012-07-09 09:28:52

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

阅读关于实例和类成员的Java教程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11392179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档