Java泛型:你能在类构造函数中实例化一个类型为parameter的对象吗



在下面的代码段中,我想在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];
}

最新更新