在下面的代码段中,我想在GenericStack类构造函数中创建数组对象。我理解为什么这是个问题。根据我的理解;T";就编译器而言,可以是任何类。这个类T可以是一个抽象类,因此不能实例化。例如,java.lang.Number类是一个抽象类,我可以很好地将java.lang.NNumber传递给T.
我现在的问题是:
有没有一种方法可以告诉编译器(通过一些有界参数或其他方法(,我要传递的类将是一个可以实例化的具体类来代替T?我知道我可以很容易地在main中创建数组,然后传递引用,但我发现实现这种需求的方法有点混乱。
public class GenericStack<T> {
//Data for the stack is an array but can be changed to list.
public static final int stackSize = 10;
private T[] stackData;
private int tos;
public GenericStack(int size) {
stackData = new T[size]; // This line will error out
tos = -1;
}
public T pop() {
try {
return stackData[tos--];
} catch (Exception e) {
System.out.println("Stack empty.Cannot POP from an empty stack.");
return null;
}
}
public void push(T stackObj) {
try {
stackData[++tos] = stackObj;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Stack is full. Cannot push a element into a full stack.");
}
}
public static void main(String[] args) {
GenericStack<Integer> intStack = new GenericStack<Integer>(GenericStack.stackSize);
GenericStack<String> stringStack = new GenericStack<String>(GenericStack.stackSize);
}
}
你必须这样做。
public GenericStack(int size) {
stackData = new Object[size];
tos = -1;
}
然后是
@SuppressWarning("unchecked")
public T pop() {
// check stack state
return (T)stackData[++tos];
}