我正在实现基于简单双向列表的Java Generics嵌套数据结构。
MyList包含包含Info的节点。
public class MyList<E> {
public Node<E> head;
public Node<E> tail;
public MyList() {
this.head = this.tail = null;
}
public add(E Info) {
this.head = new Node<E>(info); // i'm considering just one element
}
}
public class Node<E> {
private Node<E> succ;
private Node<E> pred;
private E info;
public Node(E info) {
this.succ = this.pred = null;
this.info = info
}
}
public class Info<K,V> {
public K key;
public V value;
public Info(K key, V value) {
this.key = key;
this.value = value;
}
}
现在我想实现以下目标。
第一个问题:我知道Java不允许创建通用数组;是否有解决方法来创建它?
好的,让我们尝试使用“扁平”物体。
MyList<Info> myList = new MyList<Info>();
现在我创建一个新的Info对象,add方法将放置在Node中。
myList.add(new Info<Integer,MyList<E>>(new Integer(10), new MyList<Info>()));
但是试图走得更远...
myList.head.value.insert(new Info<Integer,myList<Info>>(new Integer(10), new myList<Info>()));
...抛出以下错误:
cannot find symbol,
symbol: method insert(Info<Integer,MyList<Info>>)
location: class Object
第二个问题:类Object怎么样?我应该有一个List对象!
第三个问题:这是管理泛型的正确方法吗?
提前感谢您的帮助。
答案 0 :(得分:0)
您无法实例化通用数组,但始终可以使用ArrayList
。您可以安全地获得相同的功能,而且开销可以忽略不计。
创建列表时,未指定Info
MyList<Info> myList = new MyList<Info>();
相反,它应该是
MyList<Info> myList = new MyList<Info<Integer, MyList<Info<Integer, String>>>>();
由于您没有指定类型参数,因此Java编译器将它们默认为Object
类(导致上述错误)。
错误是由于不正确地处理泛型而造成的。上述修复应解决错误。通常,避免使用原始类型(始终提供适当的类型参数)。
希望这会有所帮助。
祝你好运。