为什么LinkedList.从插入返回后数据为空



首先,这是家庭作业的一部分,所以在回答时请记住这一点。

所以我尝试使用一个泛型LinkedList类,CustomerList类继承了它。下面所有的代码都是我写的,不是作为作业的一部分。

我已经写了客户类型,可以正常工作。不应该需要这些代码,因为问题与该类无关。它有3个int字段,以及一个打印信息的方法。

    public void printCustomerInfo() {
    System.out.println([int field 1, 2, 3]);
    }

这个问题与泛型LinkedList类的插入方法(我相信)有关。它接受已确定类的一个对象,并将其插入到当前LinkedList对象前面的列表中。它通过创建当前LinkedList对象的副本,将其设置为nextList,然后将当前LinkedList对象的数据修改为给定的dataIn来实现这一点。下面是LinkedList类的代码:

public class LinkedList<T> {
    T data;
    protected LinkedList<?> nextList;
    public LinkedList() {
        data = null;
        nextList = null;
    }
    public boolean isEmpty() {
        return (null == nextList);
    }
    public LinkedList<?> getNextList() {
        return nextList;
    }
    public void insert(T dataIn) {
        System.out.println("dataIn passed to insert method: t" + dataIn);
        LinkedList<T> tempList = new LinkedList<T>();
        tempList.data = this.data;
        tempList.nextList = this.nextList;
        this.nextList = tempList;
        this.data = dataIn;
        System.out.println("data field of current object: tt" + data);
    }
    @SuppressWarnings("unchecked")
    public T delete() {
        T tempDump = data;
        data = (T) nextList.data;
        nextList = nextList.nextList;
        return tempDump;
    }
    public void printInfo() {
        if (isEmpty()) {
            System.out.println("-END-");
        } else {
            System.out.println(data);
            nextList.printInfo();
        }
    }
}

CustomerList类扩展了它,并将数据类型设置为customer。下面是代码:

public class CustomerList extends LinkedList<Customer> {
    Customer data;
    public void printInfo() {
        if (isEmpty()) {
            System.out.println("-END-");
        } else {
            data.printCustomerInfo();
            nextList.printInfo();
        }
    }
}
最后,测试对象:
public class GeneralTesting {
    public static void main(String[] args) throws InterruptedException {
        // Test LinkedList class
        System.out.println(" - Create CustomerList and test methods");
        CustomerList rList = new CustomerList();
        System.out.println(" - Create a customer to store in the list");
        Customer dude = new Customer(10, 65);
        dude.setTimeServed(120);
        System.out.println("proof that customer object exists: t" + dude);
        System.out.println(" - Insert customer into the list");
        System.out.println("---method call: insert---");
        rList.insert(dude);
        System.out.println("---method end: insert----");
        System.out.println("data in the list after return: tt" + rList.data);
    }
}

这是控制台打印的内容:

 - Create CustomerList and test methods
 - Create a customer to store in the list
proof that customer object exists:  assignment3.Customer@3c250cce
 - Insert customer into the list
---method call: insert---
dataIn passed to insert method:     assignment3.Customer@3c250cce
data field of current object:   assignment3.Customer@3c250cce
---method end: insert----
data in the list after return:  null

据我所知,这是一个范围问题。也许我在方法解析时忽略的级别上分配变量。我以前遇到过类似的问题,并且能够解决它,但无法解决这个问题。不幸的是,我的教授未来几天不在城里,所以我在这里寻求帮助。

我只是试着做一个方法,简单地设置数据字段传入对象:

public void setData(T dataIn) {
    this.data = dataIn;
}

即使这样也不会改变null的数据。我知道这一定是由于没有正确理解Java泛型,所以您可以提供任何指针,(和在线资源阅读)将非常感谢。

这里有一个提示。如果你在父类LinkedList和子类中声明一个数据成员,子成员将使父类的版本黯然失色。

相关内容

  • 没有找到相关文章

最新更新