【发布时间】:2014-04-29 07:53:02
【问题描述】:
我无法理解泛型、接口和数组的细微差别以及如何一起使用它们。我有一个中间 Java 类的任务。作业如下:
- 创建一个实现 Queue 的泛型类 SimpleQueue
- 使用构造函数初始化一个有 5 个槽的数组。
- 不允许使用 ArrayList
- 如果数组被填满,我们必须能够增加它的大小
我遇到的问题是数组的初始化。这是我的代码:
import java.util.Collection;
import java.util.Iterator;
import java.util.Queue;
public class SimpleQueue<E> implements Queue<E>{
private E myQueue[];
//Constructor with no arguments.
public SimpleQueue() {
myQueue = new [5];
System.out.println("A queue with length " + myQueue.length + " was created.");
}
}
Eclipse 抱怨说我们不能创建一个通用数组。我已经设法通过这样做来让它工作:
private Object myQueue[] = Object[5];
...但我觉得这违背了使用泛型的目的。我误解了泛型的使用吗?指针将不胜感激!
这是我在工作时用来测试我的泛型类的代码:
public class SimpleQueueTester {
public static void main(String [] args) {
SimpleQueue<String> myStringQueue = new SimpleQueue<>();
SimpleQueue<Integer> myIntegerQueue = new SimpleQueue<>();
}
}
免责声明:请不要以为我希望为我完成作业。我只是停留在这一点上,我认为这将是最好的提问地点。谢谢!
编辑:我采纳了您的一些建议,现在我的代码如下所示:
public class SimpleQueue<E> implements Queue<E>{
private E[] myQueue;
@SuppressWarnings("unchecked")
//Constructor with no arguments.
public SimpleQueue() {
//This was changed. What does (E[]) do exactly?
this.myQueue = (E[]) new Object[5];
System.out.println("A queue with length " + this.myQueue.length + " was created.");
}
}
感谢您的建议!你们太棒了。
【问题讨论】:
-
试试
myQueue = (E[]) new Object[5]; -
也许我还是一头雾水,但是在创建类的实例时不应该确定数组的类型(String[],Integer[],Object[])吗?例如,我的 SimpleQueue 类的目标是能够创建类的实例并确定数组的类型,因此需要泛型。有时我可能需要一个 String[] 数组,或者有时我可能需要一个 Integer[] 数组,但我不想编写两个不同的类。如果不总是使用 Object[] 数组,这是否可能?
标签: java arrays generics interface