【问题标题】:An ArrayList containing objects I have constructed is printing these as null包含我构建的对象的 ArrayList 将这些对象打印为 null
【发布时间】:2014-04-07 18:17:22
【问题描述】:

我有一个Task 课程和一个Dev 课程。我正在向开发人员分配任务,并在 Dev 中包含的 ArrayList 中记录分配给每个开发人员的任务。这是我在Task 中的方法,它将特定任务分配给特定开发人员,其下方有 Task 构造函数:

public void setAssignedDev(Dev dev){
        this.assignedDev=dev;       
        dev.addToTasksAssigned(this);          
    }

 public Task(String newProject,String newDescription, float newEarliestStartTime,float newDuration,float newLatestFinishTime,boolean newIsTaskReferenced,ArrayList<Dev> newListDevs){
    project=newProject;
    description=newDescription;
    earliestStartTime=newEarliestStartTime;
    duration=newDuration;
    latestFinishTime=newLatestFinishTime;
    isTaskReferenced=newIsTaskReferenced;
    newListDevs=new ArrayList<Dev>(); 

};

setAssignedDev()方法触发Dev中的ArrayList&lt;Task&gt;记录任务,然后对列表进行排序:

public Dev(String newName){
    name=newName;
    tasksAssigned=new ArrayList<Task>();
}

public void addToTasksAssigned(Task task){              
    this.tasksAssigned.add(task);    
    //sort list by allotted start time
    Collections.sort(tasksAssigned, new Comparator<Task>(){            
        @Override
        public int compare(Task t1, Task t2){
          if(t2.getAllottedStartTime()>t1.getAllottedStartTime()){return +1;}
          if(t2.getAllottedStartTime()<t1.getAllottedStartTime()){return -1;}
          else {return 0;}
    }
    });

为了测试这一点,我初始化了一些类的实例,然后打印了tasksAssignedArrayList。主要方法如下:

 Dev chris=new Dev("Chris");
Dev dave=new Dev("Dave");

Task task1=new Task("LCN","",3f,1f,5f,false, new ArrayList<Dev>(Arrays.asList(chris,dave))); 
task1.setAllottedStartTime(3.5f);


Task task2=new Task("Project","",0f,3.5f,6f,false,new ArrayList<Dev>(Arrays.asList(chris)));      
task2.setAllottedStartTime(0f);

task1.setAssignedDev(chris);
task2.setAssignedDev(chris);
System.out.println(chris.getTasksAssigned());

现在,当我运行此程序时,系统会打印出:[[Task-null], [Task-null]] 正在添加任务,但是当它们返回时它们为空?我期待看到[task1,task2],我是不是误会了什么? 谢谢

编辑以包含 Dev 构造函数

【问题讨论】:

  • 你也可以显示getTasksAssigned()方法的代码吗?
  • 只是返回数组列表:public ArrayList&lt;Task&gt; getTasksAssigned(){ return tasksAssigned; }

标签: java class object arraylist


【解决方案1】:

我不知道这是否是唯一的问题,但Task 构造函数存在严重问题:

public Task(String newProject, String newDescription,
        float newEarliestStartTime, float newDuration,
        float newLatestFinishTime, boolean newIsTaskReferenced,
        ArrayList<Dev> newListDevs) {
    project = newProject;
    description = newDescription;
    earliestStartTime = newEarliestStartTime;
    duration = newDuration;
    latestFinishTime = newLatestFinishTime;
    isTaskReferenced = newIsTaskReferenced;
    newListDevs = new ArrayList<Dev>(); 
};

您将ArrayList&lt;Dev&gt; 传递给名为newListDevs 的参数,然后在参数超出范围之前为其分配一个新的空ArrayList&lt;Dev&gt;。您不会对传递给您的列表中的数据(如果有)执行任何操作,并且新列表将在 ctor 完成后立即进行垃圾收集。

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 2020-08-09
    • 2014-07-10
    • 2020-04-13
    • 2020-10-18
    • 2012-12-04
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多