posts - 1,comments - 14,trackbacks - 0
请各位老大看下面两段代码

C#代码:

public class A<T> {

   
private T[] arr;
   
   
public A(int capacity){
        arr
= new T[capacity];
        Console.WriteLine(
"End");
    }
}



Java代码:

public class A<T> {

   
private T[] arr;
   
   
public A(int capacity){
        arr
= new T[capacity];
        System.
out.println("End");
    }

}


C# 代码很轻松就通过编译了,而Java的代码,eclipse却提示我说“不能创建 T 的范型数组”。控制台编译显示如下信息:
generic array creation
  arr = new T[capacity]; 
          ^
1 error


这到底是怎么回事呀,难道是我什么地方搞错了,还是 Java 真的不支持范型数组,请各位老大指教!

本来想学习数据结构的, 由于C# 和 java 都支持范型,犹豫了几天还是决定用 java ,没想到准备写一个最简单的静态表,就被困在这里了,在网上竟然也搜不到相关的说明,在好几个论坛求助都没得到回答,真是郁闷呀
posted on 2005-08-08 16:32 左光 阅读(1799) 评论(14)  编辑  收藏

FeedBack:
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-08 17:00 | ivanwan
你的eclipse是现在还不支持范型的.你只能用控制台来编译.  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-08 17:20 | 左光
我的eclipse是3.1的,应该没问题的,即使这样的我还是按照您说的在控制台下编译了一把,还是不行呀!

提示如下:

generic array creation

arr = new T[capacity];
^

1 error

这怎么回事呀  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-08 17:22 | 左光
^ 应该在 new 的下面  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-08 17:47 | 左光
本来想学习数据结构的, C# 和 java 都支持范型,犹豫了几天还是决定用 java ,没想到准备写了一个最简单的静态表,就被困在这里了,在网上竟然也搜不到相关的说明,真是郁闷呀  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-08 18:17 | zeno
java下要这么用
public class A<T> {

private T[] arr;

public A(int capacity){
arr = (T[])new Object[capacity];
System.out.println("End");
}
}  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-08 18:42 | 左光
上面这位大虾,按你的方法还真的通过了编译,但是总感觉别别扭扭的!虽然通过了,编译器还是给出了一个提示,大体意思是“使用了未检查的或者不安全的操作”。

另外,我的理解使用范型就是为了避免转型,提高性能,结果这个地方为了使用范型竟然还得转型,总觉得让人难以理解,是不是还有更好的解决办法?  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-08 18:55 | Dennis
沒錯, 它是不支持的

比較安全而有效的做法是, 在 Class 以外建立 array
就像是 List.toArray 的做法一樣  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-08 19:14 | zeno
java的范型是编译器来完成的。
就说不会因为你用了范型而加快运行速度。
array是不支持范型的,如果不愿意用array,可以用ArrayList
如果没办法的话,可以参照上面的做法。
上面的做法是我从jdk source里抄的。  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2005-08-09 09:40 | 大胃
我的随笔也许能解答楼主的疑惑:

http://www.blogjava.net/sean/archive/2005/08/09/9630.html  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2006-09-20 12:50 | 新手
java的范型是像C++的模板那样,依赖源代码的?那可以发行范型.class组件吗?
说是范型,里面其实都是存储的Object,然后依赖运行时类型检查?

感觉还是C#的范型彻底一点,为了不改JVM而牺牲功能感觉不划算,估计这是永远的遗憾了。  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2007-05-24 18:51 | broad-axe
1. 要全面支持jdk5,应使用eclipse 3.2

2. jdk5 中不支持“创建范型数组”,但是可以声明,或在方法中返回  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2007-08-14 17:03 | 娄建成
不是不支持数组,而是范型是一种,特殊的类型,不能用new来实例化,这点和其他类型不同。即便你不用 arr = new T[capacity] 不把arr声明为数组,只是声明为T arr;在你用arr实例化对象时候也会出错 如:arr = new T();
一样会报错。
  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2008-02-06 13:13 | ForzaMilanGong
....
问题是Java是纯动态链接
定义T[] t = new T[]时,编译器无法确定具体的T是否有0参的构造器  回复  更多评论
  



标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-08-08 18:03 编辑过
 
 
相关链接:
网站导航: