2016-10-29 35 views
0

почему нет autoboxing в строке sum + = nums [i] .doubleValue(). u может видеть, что nums [i] находится в объектной форме, поэтому не может просто написать sum + = nums [i], зачем нужен doubleValue(), который является ручным способом автобоксинга и распаковки. я успешно скомпилировал программу, в которой число в форме объекта возвращается из метода и автоматически назначается как double.autoboxing в generic, может autoboxing работать с объектом

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

Autoboxing/распаковка работает с 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 v = iob.getob(); эта программа работает класса Gen T акушера; Gen (T o) { ob = o; } T getob() { return ob; } класс GenDemo { public static void main (String args []) { Gen iob = new Gen (88); int v = iob.getob(); System.out.println ("value" + v); } } –

Смежные вопросы