但可以先创建一个Object类型的数组,再强制类型转化为泛型数组:

T[] a = (T[]) new Object[length];

这条语句是对的,因为对于没有限定的类型变量,类型擦除后用Object代替T,上面语句变为:

Object [] a = ( Object []) new Object[length];

上面这条语句很明显没有问题。

下面是一个测试方法。它接收一个泛型数组,然后创建一个长度与接收的数组长度一样的泛型数组,并把接收的数组的元素复制到新创建的数组中,最后打印出新数组中的所有元素。Java源码如下:

	@SuppressWarnings("unchecked")
	public <T> void test2(T[] a) {
		T[] b = (T[]) new Object[a.length];
		for (int i = 0; i < a.length; i++) {
			b[i] = a[i];
		for (int i = 0; i < b.length; i++) {
			System.out.println(b[i]);
这个方法可以正确执行。 

2.如果我们要找出新创建的数组中的最小元素,因为需要比较元素,所以有,T extends Comparable<T>。创建新数组的语句:

T[] b = (T[]) new Object[a.length];

类型擦除后变为

Comparable[] b = (Comparable[]) new Object[a.length];

上面这条语句是错的,因为不能把Object数组造型为Comparable数组。这时,可以用反射包中Array类创建数组:

T[] b = (T[]) Array.newInstance(a.getClass().getComponentType(), a.length);

下面是一个测试方法。它接收一个泛型数组,然后创建一个长度与接收的数组长度一样的泛型数组,并把接收的数组的元素复制到新创建的数组中,最后找出新数组中的最小元素,并打印出来。Java源码如下:

@SuppressWarnings("unchecked")
	public <T extends Comparable<T>> void test(T[] a) {
		T[] b = (T[]) Array.newInstance(a.getClass().getComponentType(),
				a.length);
		for (int i = 0; i < a.length; i++) {
			b[i] = a[i];
		T min = null;
		boolean flag = true;
		for (int i = 0; i < b.length; i++) {
			if (flag) {
				min = b[i];
				flag = false;
			if (b[i].compareTo(min) < 0) {
				min = b[i];
		System.out.println(min);

上面这个方法可以正确运行。

java中,可以声明一个泛型数组,不能通过直接通过T[] tarr=new T[10]的方式来创建数组,最简单的方式便是通过Array.newInstance(Classtype,int size)的方式来创建数组例如下面的程序。public class ArrayMaker {private Class type;public ArrayMaker(Class type) {this.type... 很多人应该很清楚,在 Java 中,是不能直接创建泛型对象和泛型数组的。原因是 Java 有类擦除,任何泛型类在擦除之后就变成了 Object 类,因此创建泛型对象就相当于创建了一个 Object 类的对象。创建 Object 类的对象通常没有任何意义,所以直接创建泛型对象的行为被编译器禁止。泛型数组也是一样。 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a generic array of T,初学泛型时,看到这个错就以为Java中不能创建泛型数组,随着不断的深入,当看到Tinking in Java中的泛型时,Java中是可以创建泛型的,真的是无知... 可以声明带泛型数组引用,但是不能直接创建泛型数组对象,可以通过java.lang.reflect.Array的newInstance(Class<T>, int )创建T[]数组 import java.lang.reflect.Array; public class Fruit<T> { private T[] array; public Fruit(Class<T> clz, int length) { 泛型数组使用的好处: 在我们编程的时候,当我们用到数组的时候,我们总是,提前就确定好了数组的大小,并且数组的大小是不可变得,但是有些时候我们并不能确定数组的大小,所以为了避免在编译是就确定数组的大小,就采用了泛型数组java中自带的泛型:Collection、List、Map和Set List包含Vector、ArrayList、AbstractSequentialList set包括HashSet、TreeSet Map包括HashMap、TreeMap、HashTable 在java中有 我有一个ClassClass ClassO.和类SecondClass< O&gt ;,我想在SecondClass< O>中创建一个O []在从FirstClass< O>调用的例程中,其中O是通用类参数.我找不到如何执行此操作.我特别需要O [](而不是ArrayList O或类似的东西),因为我需要经常在循环体内获取它的元素,这对我算法的执行时间很重要.... 3 objs[0] = 123 将String数据转Object数组, objs里面记忆的是String元素, 第三行我们给objs赋值了一个int元素,运行时会报出ArrayStoreException。