当前位置: 代码迷 >> Java相关 >> 求大神讲授为什么在JAVA里 用泛型编程不能创建数组
  详细解决方案

求大神讲授为什么在JAVA里 用泛型编程不能创建数组

热度:37   发布时间:2016-04-22 20:40:33.0
求大神讲解为什么在JAVA里 用泛型编程不能创建数组
本人是小菜一枚,在上的算法课要用到JAVA实现。
其中讲到栈的时候,用到了泛型编程,代码如下

public class raStack<Item>{
     private int N;
     private Item[] s;
     
     public raStack() { s = (Item[]) new Object[1]; }
     public void push(Item item) {
            if(s.length == N)  resize(2 * s.length);
            s[N++] = item;
     }
     public Item pop() {
            Item item = s[--N];
            s[N] = null;
            if(N > 0 && N == s.length / 4)  resize(s.length / 2);
            return item;
     }
     public void resize(int capacity) {
            Item[] copy = (Item[]) new Object[capacity];
            for(int i = 0;i < N; i++)
                      copy[i] = s[i];
            s = copy;
     }
     public static void main(String[] args) {
            raStack<String> r = new raStack<String>();
     }

}


其中s = (Item[]) new Object[1]; 
这里,为什么不能直接用  s = new Item[1];    ?

求大神讲解。
------解决思路----------------------
Java编程思想上解释为类型擦除。
我的理解:
Item是某个类型,该类型在未创建泛型类时,是不确定的(不知道是那个class类),Java中的new对象必须是明确已知的对象,就是说必须要有class文件与之对应,而这里你直接new Item[1],Item对应哪个class文件JVM并不知道,所以是不对的;但Item是一个类型这一点是确定的并且只能是一种类型,而Java支持类型转换,你可以将某个类型强制转换为另一种类型,所以s = (Item[]) new Object[1];是可以的,也是唯一的方式。
  相关解决方案