I am currently studying object-oriented programming, and now I am studying the Generics section. I have the following code from a Java class, and I ask you to do this in order to make the last calculateSquares method general. I am really puzzled by this, I can tell you.
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);
}
}
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 learned is that the List Number should become a List? extends Number , for example:
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());
}
}
The 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 is:
for (? extends Number n : src) {
dest.add(n * n.intValue());
dest.add(n.doubleValue() * n.doubleValue());
}
}
But that seems wrong. What should I do for the for loop?
user5669062
source
share