hallo zusammen,
ich bereite mich auf den scjp vor und habe ein problem beim kapitel generics.
folgender sachverhalt (etwas gekürzt):
wieso funktioniert folgender aufruf nicht ?
ich glaubte das so verstanden zu haben, dass ich durch <? extends AnimalDocGenericTest> alles in die liste einfügen könnte, was vom objekt AnimalDocGenericTest ableitet.
dem ist aber nicht so. folgende fehlermeldung liefert der compiler:
The method add(capture#1-of ? extends AnimalDocGenericTest) in the type List<capture#1-of ? extends AnimalDocGenericTest> is not applicable for the arguments (AnimalDocGenericTest.Runner.Dog)
leider kann ich damit nichts anfangen. ich sehe mich noch als relativen anfänger und hoffe die frage einigermassen verständlich formuliert zu haben.
Vorab vielen dank für die hilfe
gruß
mario
ich bereite mich auf den scjp vor und habe ein problem beim kapitel generics.
folgender sachverhalt (etwas gekürzt):
Code:
public abstract class AnimalDocGenericTest {
public abstract void checkUp();
/**
* way 2 generics:
* ----------------------------------------------------------
* -------------------------------------------------------
* ------------------
* --------------------------------------------------------
* ---------------------------------------
*/
class Runner extends AnimalDocGenericTest {
public void main(String[] args){
List<? extends AnimalDocGenericTest> aDog = new ArrayList<Dog>();
List<? extends AnimalDocGenericTest> aCat = new ArrayList<Cat>();
List<? extends AnimalDocGenericTest> aBird = new ArrayList<Bird>();
aDog.addAll(aDog);
}
class Dog extends AnimalDocGenericTest {
public void checkUp() {
System.out.println("dog specific ...");
}
}
class Cat extends AnimalDocGenericTest {
public void checkUp() {
System.out.println("cat specific ...");
}
}
class Bird extends AnimalDocGenericTest {
public void checkUp() {
System.out.println("bird specific ...");
}
}
public void checkAnimals(
ArrayList<? extends AnimalDocGenericTest> animalList) {
for (AnimalDocGenericTest x : animalList) {
x.checkUp();
}
}
public void addAnimal(List<? super Dog> animals) {
animals.add(new )
}
@Override
public void checkUp() {
}
}
}
wieso funktioniert folgender aufruf nicht ?
Code:
aDog.add(new Dog());
ich glaubte das so verstanden zu haben, dass ich durch <? extends AnimalDocGenericTest> alles in die liste einfügen könnte, was vom objekt AnimalDocGenericTest ableitet.
dem ist aber nicht so. folgende fehlermeldung liefert der compiler:
The method add(capture#1-of ? extends AnimalDocGenericTest) in the type List<capture#1-of ? extends AnimalDocGenericTest> is not applicable for the arguments (AnimalDocGenericTest.Runner.Dog)
leider kann ich damit nichts anfangen. ich sehe mich noch als relativen anfänger und hoffe die frage einigermassen verständlich formuliert zu haben.
Vorab vielen dank für die hilfe
gruß
mario