这是我正在尝试做的事情:
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/