首先,这是家庭作业的一部分,所以在回答时请记住这一点。
所以我尝试使用一个泛型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和子类中声明一个数据成员,子成员将使父类的版本黯然失色。