返回信息流<T> T[] makeArray(int i){
return new T[i];
}
编译无法通过,原因是不允许泛型数组,但是没有想明白
为什么要不允许泛型数组,运行时再确定类型不可以么?
对于数组是编译时就必须要确实类型么?编译时还未分配
内存,就一定要确定T的size么?
如果函数是这个样子:
<T> T[] makeArray(int i){
T[] tt = new T[10];
return new T[i];
}
那么是不是编译时就要知道tt分配的堆空间?所以必须确
定T的类型?
乱七八糟的,俨然编译原理没有学好
求大牛指点,不胜感激
这是一条镜像帖。来源:北邮人论坛 / java / #18151同步于 2011/5/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于泛型数组?
Everybody
2011/5/5镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
java在生成class文件的时候,并没有记录实际类型的信息,这也就造成了创建了一个未知类型的数组
给LZ搜了一片文章,里面详细介绍了java泛型生成class文件的原理
http://developer.51cto.com/art/201103/250028.htm
【 在 lovemaker 的大作中提到: 】
: java在生成class文件的时候,并没有记录实际类型的信息,这也就造成了创建了一个未知类型的数组
: 给LZ搜了一片文章,里面详细介绍了java泛型生成class文件的原理
: http://developer.51cto.com/art/201103/250028.htm
: ...................
真的非常感谢,很受用~
【 在 lovemaker 的大作中提到: 】
: 另,LZ是不是跟多态有点混淆,觉得jvm可以在运行时检查类型,其实这也是建立在生成的class符合规范的基础上的。
: --
之前确实有一些误解,认为泛型类的实例化,类型是运行时确定的,刚才仔细想了
想,应该是编译时就已经确定,所以之前才有上面的问题,不过那篇文章真的很好,
又了解了一些以前不知道的内容,非常的感谢
可以这么理解,一旦用了new 运算符,那么必须要知道类型,这种检查是在编译期的
【 在 Everybody 的大作中提到: 】
: : 另,LZ是不是跟多态有点混淆,觉得jvm可以在运行时检查类型,其实这也是建立在生成的class符合规范的基础上的。
: : --
: 之前确实有一些误解,认为泛型类的实例化,类型是运行时确定的,刚才仔细想了
: ...................