2017-12-04 10 views
0

2つの引数をとるgetLowCostという一般的なメソッドを書きます。配列リストarLst1は、Battery、Single Use、またはRechargeableのいずれかで、doubleコスト。私は、供給されたコスト以下のコストを持つarLst1のすべてのバッテリーの配列リストを返すことになっています。私はこのように始まるだろうと思っ引数として提供されているものと同じ型を返す - Java8 Generics

public ArrayList<? extends Battery> getLowCost(ArrayList<? extends Battery> list, double val) { 
    ArrayList<? extends Battery> list2 = new ArrayList<>(); 
    for (Battery obj: list) { 
     if (obj.getLifeTimeCost() < val) { 
      list2.add(obj); 
     } 
    } 
} 

残念ながら、私は私のリスト2にオブジェクトを追加することはできません。戻り値の型が最初の引数と同じ型であることをどうすれば保証できますか?

+0

ヒント:あなたが使用する方法を学びました[一般的な方法](https://docs.oracle.com/javase/tutorial/java/generics/bounded.html)まだですか? –

答えて

3

は型変数を使用します。

public <T extends Battery> ArrayList<T> getLowCost(ArrayList<T> list, double val) { 
    ArrayList<T> list2 = new ArrayList<>(); 
    for (T obj: list) { 
     if (obj.getLifeTimeCost() < val) { 
      list2.add(obj); 
     } 
    } 
    return list2; 
} 
関連する問題