尝试使用静态方法初始化List,但访问时项目为null

时间:2019-07-06 21:56:46

标签: java

我在Java中有一个作业,我们的教授为我们提供了测试代码,我们必须编写必要的类和方法以使其起作用,但是我对Java并不陌生,并且遇到了一些麻烦。这是我教授的代码:

public class TestProcess {

public static void main(String[] args) {
    /*
     *  A Process is a finite sequence of Tasks
     *
     */

//part one  
    Process p = Process.getOrders(); // special process with 3 tasks 
    Task firstTaskOfProcessP = p;
    List<Task> ListTasksProcessP = p;

    assert p!=null;

    // part two
    assert p.size()==3;

    Task t1 = p.get(0); // hint: 0 means first element of the List, 1 means second, 2 means third.
    Task t2 = p.get(1); // hint: 0 means first element of the List, 1 means second, 2 means third.
    assert t1 == firstTaskOfProcessP;

}

我困惑的部分是第一部分。我必须使用静态方法来初始化p而不是常规构造函数。这意味着getOrders必须返回Process类型的变量。同时必须将p分配给Task类型的变量以及Task列表。这是我最后想出的代码:

import java.util.*;

public class Task<T extends Task> extends ArrayList<Task>{
    public String description;

    public Task(){
        super();
    }

    public Task(String description){
        this.description = description;
    }

    public String getDescription(){
         return this.description;
    }
}

import java.util.*;

public class Process<T extends Task> extends Task<T>{

    public Process(){
        super();
    }

    public Process(String description){
        this.description = description;
    }

    public static Process<Task> getOrders(){
        ArrayList<Task> list = new Process<Task>();

        Task t1 = new Task("Routine startup task");
        Task t2 = new Task("Sending orders Task");
        Task t3 = new Task("EndingTask");

        list.add(t1);
        list.add(t2);
        list.add(t3);

        return (Process<Task>)list;
    }

    public Task get(int index){
        return (Task)this.get(index);
    }
}

该代码进行编译,但是,当到达第二部分并执行p.get(0)时,结果表明其中没有null。为什么它为null,如何使此代码正常工作?另外,这是我第一次使用静态方法而不是构造函数,所以我不知道自己在做什么。编写方法getOrders的好方法是什么?

1 个答案:

答案 0 :(得分:1)

所以不要嫉妒你。混乱的逻辑意味着流程是-任务具有-列表并且等于t1(...假设我可以正确读取此内容)。这是满足断言的一种同样混乱的方法。祝你好运。

interface Task  { }

class Process extends ArrayList<Task> implements Task { 
   static Process taskList = new Process ();

    public static Process getOrders () {
        taskList.add(taskList);
        taskList.add(new Process ());
        taskList.add(new Process ());

        return taskList;
}}