Rajiv
Legacy Member
Hoi
Ik ben aan het studeren voor mijn scjp, en nu ben ik bezig met generics.
Ik ben een aantal vraagjes hierover aan het oplossen, maar met de volgende zit ik toch wel vast
Hier is de vraag met de antwoorden:
B: ok, Integer = subklasse van Number en returntype List<? super E> klopt ook, superklasse of klasse Integer
E en F ok voor dezelfde redenen, behalve argument voor methode-aanroep verschilt, ArrayList -> List, maar dat is ok hier
Maar wat ik niet snap is waarom C foutief is.
1) Integer is een subklasse van Number
2) returntype List<? super E>, dus de teruggegeven List kan van (of supertype) E zijn. En aangezien E = Integer is, zou volgens mij Number toch ook moeten werken?
Of ben ik hier verkeerd?

Ik ben aan het studeren voor mijn scjp, en nu ben ik bezig met generics.
Ik ben een aantal vraagjes hierover aan het oplossen, maar met de volgende zit ik toch wel vast

Hier is de vraag met de antwoorden:
Code:
Given a method declared as:
public static <E extends Number>List<?super E>process(List<E>nums)
A programmer wants to use this method like this:
/// INSERT DECLARATIONS HERE
output = process(input);
Which pairs of declarations could be placed at /// INSERT DECLARATIONS HERE to allow
the code to compile? (Choose all that apply.)
A. ArrayList<Integer> input = null;
ArrayList<Integer> output = null;
B. ArrayList<Integer> input = null;
List<Integer> output = null;
C. ArrayList<Integer> input = null;
List<Number> output = null;
D. List<NNmber> input = null;
ArrayList<Integer> output = null;
E. List<Number> input = null;
List<Number> output = null;
F. List<Integer> input = null;
List<Integer> output = null;
G. None of the above.
Answer:
B, E, and F are correct.
The return type of process is definitely declared as List , not an ArrayList, so A and D
are wrong. C is wrong because the return type evaluates to List<Integer>, and that can't
be assigned to a variable of ype List<Number>. Of course all these would probably cause a
NullPointerException since the variables are still null —but the question only asked us
to get the code to compile.
E en F ok voor dezelfde redenen, behalve argument voor methode-aanroep verschilt, ArrayList -> List, maar dat is ok hier
Maar wat ik niet snap is waarom C foutief is.
1) Integer is een subklasse van Number
2) returntype List<? super E>, dus de teruggegeven List kan van (of supertype) E zijn. En aangezien E = Integer is, zou volgens mij Number toch ook moeten werken?
Of ben ik hier verkeerd?


Het zo gebruiken grenst aan het onleesbare.