Java 错误 创建泛型数组 解决方法

Java泛型数组创建限制
本文探讨了Java中泛型类SeqStack的具体实现,并详细解释了为何无法直接创建泛型数组,以及如何通过类型转换绕过这一限制。
 泛型类:
//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

elem = new T[size];  

这句话在编译时JDK会报错:创建泛型数组
也就是是说JDK不允许我们new出一个泛型数组。所以本着曲线救国的思想,先创建一个对象数组,然后再强行类型转换为泛型数据:
elem = (T[])new Object[size];
然后编译,Ok,一切正常

问题思考:
JDK为什么不允许创建泛型数组呢?我相当疑惑。泛型仅允许传入引用类型,所以new一个泛型需要申请的内存空间是确定的。为什么不能创建泛型数组呢?知道的大虾请跟帖,谢谢。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值