2016-10-29 65 views
0

なぜ、行sum + = nums [i] .doubleValue()にオートボクシングがありません。なぜあなたはsum + = nums [i]を書くことができないのですか?なぜ、autoboxingとunboxingの手動の方法である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); 
} 
    } 

答えて

0

オートボクシング/アンボクシングはDouble, Integer, Character同様Wrapper classes

で動作します。

Numberはラッパークラスではないため、Numberでは機能しません。

IntegersとDoublesの両方で動作するように、以下のようにメソッドを変更することができます。

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

ありがとうございますが、私はプログラムの "extend Number"を削除してコンパイルしようとしましたが、まだエラーがありました。どこに他の同様のタイプのプログラムがありますか? aa aa –

+0

ありがとうございます。しかし、私はプログラムの "extend Number"を削除してコンパイルしようとしましたが、まだエラーがありました。他の同様のタイプのプログラムでは、この行を参照してください。int v = iob.getob();このプログラムは クラスゲン TのOBに動作します。 Gen(T o){ ob = o; } T getob(){ return ob; } クラスGenDemo { public static void main(文字列args []){ Gen iob = new Gen (88); int v = iob.getob();System.out.println( "value" + v); } } –

関連する問題