java 泛型数组怎么实例化?

louisjiang 2011-08-17 05:05:23
如题

public class Test<T>(){
public Test(){
T[]= new T[10];//这是错误的.要怎么样才能够实例化了?
T[]=???;
}
}
...全文
3133 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
逐知逐行 2014-04-22
  • 打赏
  • 举报
回复
如果可以获得该泛型的实际类型的话(也就是clazz): T[] copy = (T[])Array.newInstance(clazz, list.size()); 这个方法或许可以试一下
vkqiang 2014-04-22
  • 打赏
  • 举报
回复
范型推荐用list代替数组
xiaoliner2050 2012-10-14
  • 打赏
  • 举报
回复
可以参考jdk中ArrayList的处理方法!!
网上看到一篇文章,讲得有点门道:http://soft.chinabyte.com/database/9/12282009.shtml
dearzhou520 2012-02-13
  • 打赏
  • 举报
回复
泛型数组最好还是用集合代替,如果用强制类型转化来委婉的实现效果,就失去了使用泛型的意义了。

我提供一个方法:

public abstract class Test<T>{
T[] array;
public Test(){
array = getArray();
}
public abstract T[] getArray();
}


public class Test1 extends Test<具体的类型>{
@Override
public 具体的类型[] getArray(){
return new 具体的类型[100];
};
}
xzxw1115 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 caishaolang 的回复:]

感觉用集合安全点
[/Quote]

阳明 to life 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jlj493509534 的回复:]

实际我要做的就是将一个泛型约束的集合转化为该泛型的数组?
Java code

List<T> list = new ArrayList<T>();
//这个泛型T数组必须被实例化,不然下面的toArray会出现NullPointException,所以怎么样才能够将泛型数组实例化
T [] t =null;
t = list.toArray(……
[/Quote]
返回Object[]强转吧,你原本就是T类型数组,不可能抛异常
toArray里面需要用到T[]的实例获取Class对象,没其他办法
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
louisjiang 2011-08-19
  • 打赏
  • 举报
回复
实际我要做的就是将一个泛型约束的集合转化为该泛型的数组?

List<T> list = new ArrayList<T>();
//这个泛型T数组必须被实例化,不然下面的toArray会出现NullPointException,所以怎么样才能够将泛型数组实例化
T [] t =null;
t = list.toArray(t);
laughing__ 2011-08-19
  • 打赏
  • 举报
回复


T[]t = new T[10];


T是对象就对了
louisjiang 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xzxw1115 的回复:]
引用 7 楼 caishaolang 的回复:

感觉用集合安全点



[/Quote]

问题是我就要将他转化为数组啊?
zwxiaole 2011-08-18
  • 打赏
  • 举报
回复
T t =new T();
zwxiaole 2011-08-18
  • 打赏
  • 举报
回复
T[] T= new T[10];
zzdds 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 jlj493509534 的回复:]
如题
Java code

public class Test<T>(){
public Test(){
T[]= new T[10];//这是错误的.要怎么样才能够实例化了?
T[]=???;
}
}
[/Quote]

1、Java中目前没有泛型数组这个概念。
2、数组本身类似于一个集合,在定义声明及初始化时已经严格的规定好了里面对象的类型,故而无需再进行泛型的 约束了。
3、数组没有实例化的概念,应该是定义和初始化。
3、你在进行数组的声明时语法也不规范。 假如 T 为数组名,则应该是 Type[] T = new Type[length];或 Type[] T = new Type[length]{members};或 Type[] T = {members}。假如 T 为类型,则应该是
T[] name = new T[length];或 T[] name = new T[length]{memebers};或 T[] name = {members};

虽然你犯了错误,但大家研究一下也对我们有所帮助,至少使头脑中的一些理论和概念经过了淬火。
没事眯一会 2011-08-18
  • 打赏
  • 举报
回复
和楼主共同学习!
hnthchuan 2011-08-18
  • 打赏
  • 举报
回复
学习了。。。以后会注意的。。。
BearKin 2011-08-18
  • 打赏
  • 举报
回复
Java不支持泛型数组 LZ放弃吧
4L说的我可以举个例子

public class TestArray {
public static void main(String[] args) {
String[] strings = {
"a", "b", "c"
};

Object[] objs = strings;
objs[0] = new Integer(1);
}
}


常规情况下 使用数组应该避免类型转换 虽然编译没有出错 但是数组的实际类型是不会改变的
泛型的作用是限制类型 难免会出现<? extends Object>这种类型 这种类型的话你想让这个数组如何定义?
caishaolang 2011-08-18
  • 打赏
  • 举报
回复
感觉用集合安全点
louisjiang 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 crud0906 的回复:]
没办法实例化,看看thinking in java就知道了。楼主找到的方法不可靠,隐含着ClassCastException
[/Quote]

请问在什么情况下会出现这样的异常了?
_jerrytiger 2011-08-17
  • 打赏
  • 举报
回复
T[]= new T[10];
没变量名。
crud0906 2011-08-17
  • 打赏
  • 举报
回复
没办法实例化,看看thinking in java就知道了。楼主找到的方法不可靠,隐含着ClassCastException
louisjiang 2011-08-17
  • 打赏
  • 举报
回复 4
找到解决的办法了

T[] ts =(T[]) new Object[10];
加载更多回复(2)

81,123

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧