Java 尝试使用静态方法初始化列表,但访问时项为空

Java 尝试使用静态方法初始化列表,但访问时项为空,java,Java,我有一个关于java的作业,教授给了我们一个测试代码,我们必须编写必要的类和方法来让它工作,但是我是java新手,我在这方面遇到了一些问题。这是我教授的密码: public class TestProcess { public static void main(String[] args) { /* * A Process is a finite sequence of Tasks * */ //part one Process p = P

我有一个关于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;

}
公共类测试过程{
公共静态void main(字符串[]args){
/*
*过程是任务的有限序列
*
*/
//第一部分
Process p=Process.getOrders();//包含3个任务的特殊流程
Task firstTaskOfProcessP=p;
List ListTasksProcessP=p;
断言p!=null;
//第二部分
断言p.size()==3;
Task t1=p.get(0);//提示:0表示列表的第一个元素,1表示第二个,2表示第三个。
Task t2=p.get(1);//提示:0表示列表的第一个元素,1表示第二个,2表示第三个。
断言t1==firstTaskOfProcessP;
}
我感到困惑的部分是第一部分。我必须使用静态方法来初始化p,而不是常规构造函数。这意味着getOrders必须返回Process类型的变量。同时,尽管p必须能够分配给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.*;
公共类任务扩展了ArrayList{
公共字符串描述;
公共任务(){
超级();
}
公共任务(字符串描述){
this.description=描述;
}
公共字符串getDescription(){
返回此.description;
}
}

import java.util.*;
公共类进程扩展任务{
公共程序(){
超级();
}
公共进程(字符串描述){
this.description=描述;
}
公共静态进程getOrders(){
ArrayList=新进程();
任务t1=新任务(“例行启动任务”);
任务t2=新任务(“发送订单任务”);
任务t3=新任务(“结束任务”);
列表。添加(t1);
增加(t2);
增加(t3);
退货(流程)清单;
}
公共任务获取(int索引){
返回(任务)this.get(索引);
}
}

但是,这段代码在到达第二部分并执行p.get(0)时进行编译事实证明它里面是空的。为什么它是空的,我如何才能让这段代码工作呢?而且,这是我第一次使用静态方法而不是构造函数,所以我不知道我在做什么。写getOrders方法的好方法是什么?

所以不要嫉妒你。混乱的逻辑意味着一个进程是一个任务有一个列表和equals 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;
}}
接口任务{}
类进程扩展ArrayList实现任务{
静态流程任务列表=新流程();
公共静态进程getOrders(){
任务列表。添加(任务列表);
添加(新进程());
添加(新进程());
返回任务列表;
}}

由于递归的
get
调用,您发布的代码导致出现
java.lang.StackOverflowerr
错误。请发布一个.IMHO…您是java新手,您的指导老师给了您这样的代码?这家伙是不是疯了?没有人会写这样的代码。以表面价值作为cra在理解和逆向工程类型方面,这似乎对于一个刚开始的程序员来说是完全不合适的。这在更高级的课程中可能还可以,但如果你是第一次使用静态方法的话就不行了。哎呀!你已经做得很好了。我喜欢你的努力。你似乎对我对这里发生的一切感到惊讶。太棒了!太棒了!我可能也能想出这个,但可能不是。非常好。所以这是一个非常疯狂的问题的好答案。
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;
}}