JAVA 不支持泛型数组

今日被一同事问道该如何创建Stack<Integer>数组??

答曰:

 

通过代码验证居然无法创建,百度之,原来JAVA不支持泛型数组,因为数组在创建的时候必须知道内部元素的类型,而JAVA泛型是通过擦除法实现,运行时类型参数会被擦掉。例如

运行中,类型参数String会被擦掉,只有在最后读取内部元素的时候,会进行一个类型转换,like this。

所以,如果初始化泛型数组的话,运行时编译器只能看到Stack,而看不到Stack中的泛型<String>。数组由于无法确定所持有元素的类型,所以不允许初始化。

由于java的ArrayList也是由数组实现,性能应该不会有太大差异(此处业务逻辑循环量小于十万),最后推荐同事使用集合进行存储。

如需仍然使用数组,可参考如下写法,但此处不能保证Stack中都是Integer类型,声明数组时没有强制指定Stack的泛型为Integer。

但依然可以向Stack中存入其他类型,比如:

结果

参考文章:

http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java

http://www.cnblogs.com/exmyth/p/4598971.html

https://www.zhihu.com/question/20928981


©版权声明:本文为【翰林小院】(huhanlin.com)原创文章,转载时请注明出处!

发表评论

电子邮件地址不会被公开。