我的关注 |
¥0.1 java为什么不支持泛型数组?
0

java 为什么不支持泛型数组?

佛法不二
修改
评论(0)
1个回答
0
采纳

java引入泛型的一个目的是为了消除ClassCastException问题,而如果允许泛型数组,那么就避免不了ClassCastException问题

比如:

  1. Pair<Object,Integer>[] options = new Pair<Object,Integer>[2];
  2. Object[] objs = options;
  3. objs[0] = new Pair<Double,String>(12.34,"hello");

如果可以创建泛型数组options,那它就可以赋值给其他类型的数组objs,而最后一行明显错误的赋值操作,则既不会引起编译错误,也不会触发运行时异常,因为Pair<Double,String>的运行时类型是Pair,和objs的运行时类型Pair[]是匹配的。但我们知道,它的实际类型是不匹配的,在程序的其他地方,当把objs[0]当做Pair<Object,Integer>进行处理的时候,一定会触发异常。

也就是说,如果允许创建泛型数组,那就可能会有上面这种错误操作,它既不会引起编译错误,也不会立即触发运行时异常,却相当于埋下了一颗炸弹,不定什么时候爆发,为避免这种情况,Java干脆就禁止创建泛型数组。

采纳答案
hong
修改
评论 (0)
撰写回答