gpt4 book ai didi

java - 在通用类中传递 int 数组

转载 作者:行者123 更新时间:2023-11-29 03:07:31 26 4
gpt4 key购买 nike

当我创建一个通用类对象时,为什么我必须传递Integer 类型的数组而不是int 类型的数组?如果类型化参数只能是引用类型,那么为什么传递一个 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);
}
}

最佳答案

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);

在运行时。

关于java - 在通用类中传递 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31366235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com