以下のメソッドをワイルドカードの有無にかかわらず記述しました。最初の例では、ワイルドカードのオブジェクト内でどのように相違していますか?どのようにですか?オブジェクトとは違う?
public void sumOfNumbers(List<? extends Number>numbers){
int sum=0;
for(Number n:numbers){
sum+=n.intValue();
}
System.out.println(sum);
}
以下のワイルドカードを使用しないこの方法では、なぜパラメータに入れることができますか?
public<T extends Number> void sumOfNumbers(List<T>numbers){
int sum=0;
for(Number n:numbers){
sum+=n.intValue();
}
System.out.println(sum);
}
最後に、 extends Numberなぜ、私は以下のように各ループに対して整数を持っていますか?
public void sumOfNumbers(List<? extends Number>numbers){
int sum=0;
for(Integer n:numbers){//Why cant I do this??
sum+=n.intValue();
}
System.out.println(sum);
}
また、なぜループごとにnumberを入れることができますか?この場合、上限は整数ですか?それ以下の数字はありませんか?
public void sumOfNumbers(List<? extends Integer>numbers){
int sum=0;
for(Integer n:numbers){//Why cant I do this??
sum+=n.intValue();
}
System.out.println(sum);
}
最初のケースで何を聞いているのか分かりません。なぜ 'List
あなたのリストは必ずしも 'Integer'sで構成されているわけではありません。なぜなら' List 'の場合はどうでしょうか? –
はい、それは本当ですが、それはうまくいかないでしょうか? – Eli