opt*_*nal 2 java generics autoboxing
这是我想要做的:
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; }
}
Run Code Online (Sandbox Code Playgroud)
根据自动装箱和拆箱规则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());
}
}
Run Code Online (Sandbox Code Playgroud)
我缺少的任何规则/概念.
PS.我知道可恢复类型,擦除
这与泛型无关.如果用数字代替T,它将无效.
从Number类型到某种原始类型没有拆箱转换,因此Number不能是数字运算符的操作数.
以下代码将无法通过编译,原因与您的代码完全相同 - The operator += is undefined for the argument type(s) double, Number.
Number n = 5;
double sum = 0.0;
sum += n;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |