但可以先创建一个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> ;,我想在SecondClass< O>中创建一个O []在从FirstClass< O>调用的例程中,其中O是通用类参数.我找不到如何执行此操作.我特别需要O [](而不是ArrayList O或类似的东西),因为我需要经常在循环体内获取它的元素,这对我算法的执行时间很重要....
3 objs[0] = 123
将String数据转Object数组, objs里面记忆的是String元素, 第三行我们给objs赋值了一个int元素,运行时会报出ArrayStoreException。