Я написал метод ниже с подстановочным знаком и без него. В первом случае, как отличается, а затем отбрасывается в объект для шаблона?Как это сделать? другой, тогда говорящий объект?
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, то почему can not у меня есть Integer в каждом цикле, как показано ниже?
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);
}
Кроме того, почему вы можете поставить номер в течение каждого цикла, в этом случае разве Integer верхних границ? Разве это не ниже?
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);
}
Я не понимаю, что вы спрашиваете в первом случае - вы спрашиваете, почему вы не можете написать «Список <Объект extends Number>' или «List
«Почему у меня нет целых чисел в каждом цикле», потому что ваш список необязательно состоит из 'Integer' - что, если это «Список»? –
Да, это правда, но на основе правила верхней границы расширения не должно работать? – Eli