I'm currently studying for Object-Oriented Programming and I'm currently studying the chapter Generics. I have the following code from a Java class and what I'm asked to do is to make the last method calculateSquares generic. I am really puzzled by it, I can tell you that.
Here is the class :
public class OefeningWildcards {
public static void main(String[] args){
new OefeningWildcards().run();
}
public OefeningWildcards(){
}
public void run(){
Number[] numbers = {2, 3.1, 5, 12, 2.3};
List<Number> numbersList = new ArrayList<>();
for (Number n : numbers){
numbersList.add(n);
List<Number> dest = new ArrayList<>();
calculateSquares(dest, numbersList);
Double[] doubles = {3.2, 5.6, 4.4, 6.5, 12.2};
List<Double> doublesList = new ArrayList<>();
List<Number> dest2 = new ArrayList<>();
calculateSquares(dest2, doublesList);
List<Double> dest3 = new ArrayList<>();
calculateSquares(dest3, doublesList);
}
}
//This method needs to become generic
public void calculateSquares(List<Number> dest, List<Number> src){
dest.clear();
for (Number n : src) {
dest.add(n * n.intValue());
dest.add(n.doubleValue() * n.doubleValue());
}
}
What I found out is that List Number needs to become List ? extends Number, like this :
public void calculateSquares(List<? extends Number> dest, List<? extends Number> src){
dest.clear();
for (Number n : src) {
dest.add(n * n.intValue());
dest.add(n.doubleValue() * n.doubleValue());
}
}
Thing is, I don't know what to do with the for-loop :
for (Number n : src) {
dest.add(n * n.intValue());
dest.add(n.doubleValue() * n.doubleValue());
}
}
My logical guess would have been :
for (? extends Number n : src) {
dest.add(n * n.intValue());
dest.add(n.doubleValue() * n.doubleValue());
}
}
But that seems to be incorrect. What should I do to the for-loop?