在Generic类中传递int数组

时间:2015-07-12 09:20:57

标签: java generics

当我创建一个泛型类对象时,为什么我必须传递整数类型的数组而不是 int 类型?如果typed参数只能是引用类型,那么为什么传递int变量有效但不是int数组?

class GenericA<T extends Number> {
    T arr[];

    GenericA(T o[]) {
        arr = o;
    }

    double average() {
        double sum = 0;
        for (int i = 0; i < arr.length; i++)
            sum = sum + arr[i].doubleValue();

        double average1 = sum / arr.length;

        //System.out.println("the average is" +average);
        return average1;
    }

    boolean sameAvg(GenericA<?> ob) {
        if (average() == ob.average())
            return true;
        return false;
    }
}

class GenericB {
    public static void main(String[] args) {
        Integer inum[] = {1, 2, 3, 4, 5}; //this cannot be int
        Double inum1[] = {1.0, 2.0, 3.0, 4.0, 5.0}; //cannot be double

        GenericA<Integer> ob = new GenericA<Integer>(inum);
        GenericA<Double> ob1 = new GenericA<Double>(inum1);

        boolean a = ob.sameAvg(ob1);
        System.out.println(a);
    }
}

2 个答案:

答案 0 :(得分:3)

Java泛型不支持基元(例如int)的事实是由于JVM的实现。基本上它们不像C#中那样是真正的泛型 - 关于类型的信息在运行时丢失(搜索type erasure problem)。因此,Java泛型基本上是来自Object的引擎。

例如:

List<Integer> l = new List<Integer>();
...
Integer i = l.get(0);

实际上会变成

List l = new List();
Integer i = (Integer) l.get(0);

在运行时。

答案 1 :(得分:1)

由于自动装箱,可以将int变量传递到预期Integer的位置。

但是,传递int[]所需的Integer[]是不可能的,因为对于基本类型的数组没有自动装箱。