我創建了創建一個通用類ArrayList的Numbers
public class MyMathClass<T extends Number> {
private ArrayList<T> myarraylist;
public MyMathClass(ArrayList<T> arrayList){
myarraylist = arrayList;
}
我試圖創建一個基本上計算給定 ArrayList 平均值的方法
public double average(){
var average = 0;
for(int i = 0 ; i <= myarraylist.size(); i ){
average = myarraylist.get(i);
}
}
但是當嘗試將平均值與索引i處的值相加時,我收到此錯誤:“operator cannot be applied to 'int' , 'T'
uj5u.com熱心網友回復:
它與 Unboxed Type 和 Box Type 相關。
有關更多詳細資訊,請參閱此處:說型別為“裝箱”是什么意思?
要使您的代碼正常作業,只需將 Number 轉換為 double 并求和即可。
Number num = myarraylist.get(i);
average = num == null ? 0 : num.doubleValue();
uj5u.com熱心網友回復:
Number物件實作一個doubleValue()方法。回傳這些的平均值:
public double average() {
return myarraylist.stream().mapToDouble(Number::doubleValue).average().orElse(0);
}
在orElse(0)手柄上的串列是空的。
樣式說明:盡可能使用抽象型別,所以更喜歡:
private List<T> myList;
public MyMathClass(List<T> list){
myList = list;
}
參見Liskov 替換原則。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341847.html
上一篇:如何按日期對物件和屬性進行排序?
