通用自动装箱,自动装箱可以与对象一起使用
autoboxing in generic, can autoboxing work with object
为什么 sum +=nums[i].doubleValue() 行没有自动装箱。你可以看到 nums[i] 是对象形式为什么不能只写 sum +=nums[i],为什么需要 doubleValue() 这是自动装箱和拆箱的手动方式。我已经成功编译了一个程序,其中从方法返回对象形式的数字并自动分配为双精度。
public class genericbound<T extends Number> {
T[] nums;
genericbound(T[] o){
nums=o;
}
double average(){
double sum=0.0;
for(int i=0; i<nums.length; i++)
sum +=nums[i].doubleValue();
return sum/nums.length;
}
}
class BoundsDemo{
public static void main(String args[]){
Integer inums[]={1,2,3,4,5};
genericbound<Integer> iob= new genericbound<Integer>(inums);
double v=iob.average();
System.out.println("iob average is"+v);
Double dnums[]={1.1, 2.2, 3.3, 4.4, 5.5 };
genericbound<Double> dob= new genericbound<Double>(dnums);
double w= dob.average();
System.out.println("dob average is "+w);
}
}
Autoboxing/Unboxing 适用于 Wrapper classes
喜欢Double, Integer, Character
。
Number
不是包装器 class,因此它不适用于 Number
。
您的方法可以修改如下,以同时处理整数和双精度数。
double average() {
double sum = 0.0;
for (int i = 0; i < nums.length; i++)
if( nums[i] instanceof Double) {
sum += nums[i].doubleValue();
} else if(nums[i] instanceof Integer) {
sum += nums[i].intValue();
}
return sum / nums.length;
}
为什么 sum +=nums[i].doubleValue() 行没有自动装箱。你可以看到 nums[i] 是对象形式为什么不能只写 sum +=nums[i],为什么需要 doubleValue() 这是自动装箱和拆箱的手动方式。我已经成功编译了一个程序,其中从方法返回对象形式的数字并自动分配为双精度。
public class genericbound<T extends Number> {
T[] nums;
genericbound(T[] o){
nums=o;
}
double average(){
double sum=0.0;
for(int i=0; i<nums.length; i++)
sum +=nums[i].doubleValue();
return sum/nums.length;
}
}
class BoundsDemo{
public static void main(String args[]){
Integer inums[]={1,2,3,4,5};
genericbound<Integer> iob= new genericbound<Integer>(inums);
double v=iob.average();
System.out.println("iob average is"+v);
Double dnums[]={1.1, 2.2, 3.3, 4.4, 5.5 };
genericbound<Double> dob= new genericbound<Double>(dnums);
double w= dob.average();
System.out.println("dob average is "+w);
}
}
Autoboxing/Unboxing 适用于 Wrapper classes
喜欢Double, Integer, Character
。
Number
不是包装器 class,因此它不适用于 Number
。
您的方法可以修改如下,以同时处理整数和双精度数。
double average() {
double sum = 0.0;
for (int i = 0; i < nums.length; i++)
if( nums[i] instanceof Double) {
sum += nums[i].doubleValue();
} else if(nums[i] instanceof Integer) {
sum += nums[i].intValue();
}
return sum / nums.length;
}