将类的实例添加到空arraylist时遇到问题

时间:2014-04-05 16:26:56

标签: java class arraylist

所以我有一个Task班和一个Dev班。我正在将任务分配给开发人员,并且正在记录哪些任务分配给Dev中包含的ArrayList中的每个开发人员。这是我在Task中将特定任务分配给特定开发人员的方法:

public void setAssignedDev(Dev dev){
        this.assignedDev=dev;       
        dev.addToTasksAssigned(this);  //I get a null pointer exception on this line   

    }

因此触发ArrayList<Task>中的Dev来记录任务:

public void addToTasksAssigned(Task task){              
    this.tasksAssigned.add(task);    //another null pointer exception here
    //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;}
    }
    });

你会注意到那里还有一段代码用于按照分配的开始时间对数组进行排序。

现在,当我初始化每个类的一些实例并点击运行时,我在尝试将对象添加到ArrayList时得到Null Point Exceptions。主要方法如下:

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

很清楚问题出在哪里,但我无法绕过它。为什么对象不会干净地添加到空的ArrayList?

编辑:感谢Tonga,将ArrayList的实例添加到Dev构造函数中,摆脱了空指针。我实际上确实需要最后一个参数 - 有一个Devs列表,然后在某个时刻,其中一个被分配。因此Task类需要保存与之匹配的Devs列表。

现在,当我运行此系统时,系统会输出:[[Task-null],[Task-null]] 正在添加任务但是当它们被返回时它们是空的?我期待看到[task1,task2],我是否误解了什么? 感谢

1 个答案:

答案 0 :(得分:0)

似乎在您的Dev类中,您需要为每个开发人员创建一个任务数组列表。然后在Dev类的构造函数中,您可以创建列表的实例。

public class Dev {
    private List<Task> tasksAssigned;

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

    //...
}

同样在你的Task类构造函数中,你不需要最后一个参数,它是devs的数组列表,因为每个任务只分配给一个dev,如setAssignedDev方法所示。因此,您需要在Dev类中包含Task字段,并更改Task构造函数以删除最后一个参数:

public class Task {
    private Dev assignedDev;

    public Task(String taskName, String another, float a, float b, float c, boolean d) {
        //......
    }

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