黑马程序员技术交流社区

标题: 泛型数组的强制转换问题 [打印本页]

作者: 希望的曙光    时间: 2013-1-5 10:11
标题: 泛型数组的强制转换问题
本帖最后由 张向辉 于 2013-1-16 11:25 编辑

为什么java不支持创建泛型数组?
有人说java泛型数组可以强制转换
Vector<Integer>[] VectorList=(Vector<Integer>[])new Vector[10];
HashMap<String, Long>[] mapArray = (HashMap<String, Long>[])new HashMap[10];
为什么不能转换

作者: Rancho_Gump    时间: 2013-1-5 13:34
为此  我专门翻看了Thanking in java这本书里关于泛型数组的介绍。
(Vector<Integer>[])new Vector[10]这个虽然已经转型,如果没有@Suppress Warnings注解,将得到有关这个转型的警告。这个信息存在于编译器。运行时,它仍就是Object数组,会因此引发问题。成功创建泛型数组的唯一方法就是创建一个被擦除类型的新数组,然后对其转型。

作者: 郑传庆    时间: 2013-1-5 14:07
张向辉 发表于 2013-1-5 13:34
为此  我专门翻看了Thanking in java这本书里关于泛型数组的介绍。
(Vector[])new Vector[10]这个虽然已经 ...

我是不是可以这样理解:要想成功创建泛型数组并且对其转型,只要避开java虚拟机的编译,让这个泛型数组保持在java虚拟机运行时的状态?添加注解,就相当于给这个集合打上一个标记,告诉java虚拟机说我这个是一个泛型数组,不要处理?就好像我们要想List<Integer> list这个list集合里面添加字符串一样,只要要开编译器,就可以向该集合里面添加想要的数据
作者: Rancho_Gump    时间: 2013-1-5 14:28
郑传庆 发表于 2013-1-5 14:07
我是不是可以这样理解:要想成功创建泛型数组并且对其转型,只要避开java虚拟机的编译,让这个泛型数组保 ...

我正在尝试总结下泛型数组知识,之后单独发一个帖子出来
作者: 郑传庆    时间: 2013-1-5 14:36
张向辉 发表于 2013-1-5 14:28
我正在尝试总结下泛型数组知识,之后单独发一个帖子出来

期待ing        
作者: 王阳    时间: 2013-1-5 23:22
这段代码应该可以说明问题

public class TestProblem {
        public static void main(String[] args) {
           List<String>[] list = new ArrayList[10];
          
           Object[] arr = list;
          
           List<Integer> listInteger = new ArrayList<Integer>();
           listInteger.add(19);
          
           arr[0] = listInteger;
          
           String str = list[0].get(0);
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2