第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Java 不使用 ArrayList<Double> 對象作為 Collection

為什么 Java 不使用 ArrayList<Double> 對象作為 Collection

猛跑小豬 2022-08-03 10:16:31
我想計算任何整數(shù)或雙精度集合的算術平均值。我定義了以下方法:public static double arithmeticMean(Collection<Number> collection) {    for(Number element : collection)        if (element.getClass().isInstance(Integer.class)) {            Collection<Integer> intCollection = new ArrayList<>();            for(Number number : collection)                intCollection.add(number.intValue());            return arithmeticMeanOfIntegers(intCollection);        } else if (element.getClass().isInstance(Double.class)) {            Collection<Double> doubleCollection = new ArrayList<>();            for(Number number : collection)                doubleCollection.add(number.doubleValue());            return arithmeticMeanOfDoubles(doubleCollection);        }     throw new IllegalArgumentException("Method 'arithmeticMean' only operates on integer or double types");      }為了測試該方法,我創(chuàng)建了一個雙精度數(shù)組列表,如下所示:private static ArrayList<Double> dataSet = getDataSet();private static ArrayList<Double> getDataSet() {    ArrayList<Double> dataSet = new ArrayList<>();    for(int i = 1; i < 21; i++)        dataSet.add(new Double(i));    return dataSet;}但是當我像這樣調(diào)用算術方法時:public static void main(String[] args) {    System.out.println(arithmeticMean(dataSet));    System.out.println(arithmeticMean((Collection<Number>) dataSet));}第一次調(diào)用會導致錯誤:The method arithmeticMean(Collection<Number>) in the type SimpleStats is not applicable for the arguments (ArrayList<Double>)第二次調(diào)用會導致錯誤:Cannot cast from ArrayList<Double> to Collection<Number>在閱讀了關于集合的Oracle Java教程部分之后,我不明白為什么我不能將ArrayList對象傳遞給需要集合的方法。ArrayList 繼承自 Collection,Double 繼承自 Number。有人可以解釋一下嗎?
查看完整描述

2 回答

?
德瑪西亞99

TA貢獻1770條經(jīng)驗 獲得超3個贊

我還沒有測試過這個,但我認為這是有效的。更改方法參數(shù)的類型:

public static double arithmeticMean(Collection<Number> collection) {

public static double arithmeticMean(Collection<? extends Number> collection) {

編輯:既然這樣有效,請閱讀什么是PECS的答案?它將幫助您更多地了解何時以及如何使用通用通配符。


查看完整回答
反對 回復 2022-08-03
?
繁星點點滴滴

TA貢獻1803條經(jīng)驗 獲得超3個贊

java教程:

通常,如果 是 的子類型(子類或子接口),并且是某種泛型類型聲明,則不是 的子類型。這可能是你需要學習的關于泛型的最困難的事情,因為它違背了我們根深蒂固的直覺。FooBarGG<Foo>G<Bar>

對于這種情況,您應該使用通配符,例如:Collection<? extends Number>

查看有關泛型、繼承和子類型的詳細信息


查看完整回答
反對 回復 2022-08-03
  • 2 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號