posts - 48,comments - 156,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 左洸 阅读(7149) 评论(17)  编辑  收藏

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参的构造器  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2009-01-25 11:37 | 单飞
T[] newItems = (T[]) Array.newInstance(items.getClass().getComponentType(), items.length - 1);

http://www.blogjava.net/sdyjmc/archive/2008/09/23/230762.html  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错!
2009-01-28 22:08 | 卡卡卡卡卡卡卡卡卡卡
@ivanwan

Java 不支持泛型数组!  回复  更多评论
  
# re: java 范型竟然不支持数组?有没有搞错![未登录]
2009-03-10 02:10 | James
Arrays是不支援的(請用ArrayList or Other...)

import java.util.ArrayList;

public class A<T> {

private ArrayList<T>[] arr;
public A(int i){
arr = new ArrayList[i];
for(int j=0;j<arr.length;j++){
arr[j] = new ArrayList<T>();
}
System.out.println("End");
}
}

要轉型的原因是因為<T> (任何類型)
所以不要轉型請【明白指定何種類型】

class B<Image>{
/**
* ArrayList<Image>[]
* 是表示ArrayList[]中,放置的內容物一定是Image Type
*/
private ArrayList<Image>[] arr;
public B(int i){
/**
* 因此 arr = new ArrayList<Image>[i];
* Error...沒必要也不需要 (多此一舉) !
*/
arr = new ArrayList[i];

for(int j=0;i<arr.length;j++){
/**
* 直接在此指明(初紿化時)
*/
arr[j] = new ArrayList<Image>();
}
System.out.println("End");
}
}  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: