2016-10-29 59 views
0

为什么没有autoboxing在行sum + = nums [i] .doubleValue()。你可以看到nums [i]是在对象形式中,为什么不能只写sum + = nums [i],为什么需要doubleValue()这是手动方式的自动装箱和拆箱。我已经成功编译了一个程序,其中以对象形式的数字从该方法返回并自动分配为double。自动装箱在通用,可以自动装箱工作与对象

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

回答

0

自动装箱/拆箱工作与Wrapper classes

Double, Integer, Character

Number不是包装类,所以它不会与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; 
} 
+0

谢谢,但我已经删除了“扩展数字”整个程序,并试图编译,但仍然错误。作为其他类似的类型的程序有 aa aa –

+0

谢谢,但是,我已经删除了“扩展数字”int程序并尝试编译,但仍然错误。与其他类似的程序类似,请参阅此行int v = iob.getob();该项目工程 类代 牛逼OB; Gen(T o){O1 = 0; } T getob(){ return ob; } class GenDemo {public static void main(String args []){ Gen iob = new Gen (88); int v = iob.getob(); System.out.println(“value”+ v); } } –