gpt4 book ai didi

java - 自动装箱/自动拆箱不适用于有界类型参数

转载 作者:行者123 更新时间:2023-12-03 00:57:53 25 4
gpt4 key购买 nike

这是我正在尝试做的事情:

class MyNumbers<T extends Number>{

private T[] array;

MyNumbers(T[] array){
this.array = array;
}
public void setArray(T[] array){
this.array = array;
}
public T[] getArray(){

return this.array;
}


public double avarage(){

double avg =0.0;
double sum =0.0;
for(T t: array){
sum += t.doubleValue(); // working
sum = sum+ t; // not working

}
return sum/array.length; }
}

根据自动装箱和拆箱规则 sum = sum+ t; 应该可以工作。但不能工作,因为 T 已经用 Number 类扩展了。

这是我尝试使用以下类型的内容:

public class BoundedTypeParam{

public static void main(String [] args){

Integer[] ints = {1,2,3,4,5,6};
MyNumbers<Integer> stats4Ints = new MyNumbers<>(ints);

System.out.println("Avg is same : "+ stats4Ints.avarage());

}

}

我缺少的任何规则/概念。

PS。我知道可具体化类型、删除

最佳答案

这与泛型无关。如果将 T 替换为 Number,则不起作用。

没有从 Number 类型到某些基本类型的拆箱转换,因此 Number 不能是数字运算符的操作数。

以下代码将无法通过编译,原因与您的代码完全相同 - 对于参数类型 double、Number ,运算符 += 未定义

Number n = 5;
double sum = 0.0;
sum += n;

关于java - 自动装箱/自动拆箱不适用于有界类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010281/

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