A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 希望的曙光 中级黑马   /  2013-1-5 10:11  /  1666 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 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];
为什么不能转换

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 鼓励个!

查看全部评分

5 个回复

正序浏览
这段代码应该可以说明问题

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);
        }
}
回复 使用道具 举报
张向辉 发表于 2013-1-5 14:28
我正在尝试总结下泛型数组知识,之后单独发一个帖子出来

期待ing        
回复 使用道具 举报
郑传庆 发表于 2013-1-5 14:07
我是不是可以这样理解:要想成功创建泛型数组并且对其转型,只要避开java虚拟机的编译,让这个泛型数组保 ...

我正在尝试总结下泛型数组知识,之后单独发一个帖子出来
回复 使用道具 举报
张向辉 发表于 2013-1-5 13:34
为此  我专门翻看了Thanking in java这本书里关于泛型数组的介绍。
(Vector[])new Vector[10]这个虽然已经 ...

我是不是可以这样理解:要想成功创建泛型数组并且对其转型,只要避开java虚拟机的编译,让这个泛型数组保持在java虚拟机运行时的状态?添加注解,就相当于给这个集合打上一个标记,告诉java虚拟机说我这个是一个泛型数组,不要处理?就好像我们要想List<Integer> list这个list集合里面添加字符串一样,只要要开编译器,就可以向该集合里面添加想要的数据
回复 使用道具 举报
为此  我专门翻看了Thanking in java这本书里关于泛型数组的介绍。
(Vector<Integer>[])new Vector[10]这个虽然已经转型,如果没有@Suppress Warnings注解,将得到有关这个转型的警告。这个信息存在于编译器。运行时,它仍就是Object数组,会因此引发问题。成功创建泛型数组的唯一方法就是创建一个被擦除类型的新数组,然后对其转型。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马