泛型类:
elem = new T[size];
这句话在编译时JDK会报错:创建泛型数组
也就是是说JDK不允许我们new出一个泛型数组。所以本着曲线救国的思想,先创建一个对象数组,然后再强行类型转换为泛型数据:
elem = (T[])new Object[size];
然后编译,Ok,一切正常
问题思考:
JDK为什么不允许创建泛型数组呢?我相当疑惑。泛型仅允许传入引用类型,所以new一个泛型需要申请的内存空间是确定的。为什么不能创建泛型数组呢?知道的大虾请跟帖,谢谢。
//
Coding by zhaohongliang
class SeqStack < T > {
private final int size;
private T[] elem;
private int top;
public SeqStack(int size) {
this.top = -1;
this.size = size;
elem = (T[])new Object[size];
//elem = new T[size]; 此句JDK会报错:创建泛型数组
}
public boolean empty() {
return top==-1 ? true : false ;
}
public boolean full() {
return elem.length-1==top ? true : false;
}
public void push(T item) {
if(full()) throw new StackOverFlowException();
top ++ ;
elem[top] = item;
}
public T pop() {
if(empty()) throw new EmptyStackException();
top -- ;
return elem[top+1];
}
public T peek() {
if(empty()) throw new EmptyStackException();
return elem[top];
}
}
class StackOverFlowException extends RuntimeException {}
class EmptyStackException extends RuntimeException {}
// 在java.util包里也有EmptyStackException
class SeqStack < T > {
private final int size;
private T[] elem;
private int top;
public SeqStack(int size) {
this.top = -1;
this.size = size;
elem = (T[])new Object[size];
//elem = new T[size]; 此句JDK会报错:创建泛型数组
}
public boolean empty() {
return top==-1 ? true : false ;
}
public boolean full() {
return elem.length-1==top ? true : false;
}
public void push(T item) {
if(full()) throw new StackOverFlowException();
top ++ ;
elem[top] = item;
}
public T pop() {
if(empty()) throw new EmptyStackException();
top -- ;
return elem[top+1];
}
public T peek() {
if(empty()) throw new EmptyStackException();
return elem[top];
}
}
class StackOverFlowException extends RuntimeException {}
class EmptyStackException extends RuntimeException {}
// 在java.util包里也有EmptyStackException
elem = new T[size];
这句话在编译时JDK会报错:创建泛型数组
也就是是说JDK不允许我们new出一个泛型数组。所以本着曲线救国的思想,先创建一个对象数组,然后再强行类型转换为泛型数据:
elem = (T[])new Object[size];
然后编译,Ok,一切正常
问题思考:
JDK为什么不允许创建泛型数组呢?我相当疑惑。泛型仅允许传入引用类型,所以new一个泛型需要申请的内存空间是确定的。为什么不能创建泛型数组呢?知道的大虾请跟帖,谢谢。