2016-10-29 63 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); } } –