Kovariante Rückgabewerte mit ArrayList

mr_mc_hammer

Neues Mitglied
Hallo,

zu meinem Problem erstmal ein Codeausschnitt:
Code:
import java.util.ArrayList;


class A {
}

class B extends A {
}

// "Class B is more narrow than class A"
// Classes demonstrating method overriding:

class C {
    ArrayList<A> getFoo() {
    	ArrayList<A> result = new ArrayList<A>();
    	result.add(new A());
        return result;
    }
}

class D extends C {
    ArrayList<B> getFoo() {
    	ArrayList<B> result = new ArrayList<B>();
    	result.add(new B());
        return result;
    }
}


Dabei wird mir der Fehler angezeigt:

The return type is incompatible with C.getFoo()

Wisst ihr an was das liegen könnte? Kovariante Rückgabewerte sind doch eigentlich möglich und da B ein spezielles A ist, müsste das doch eigentlich gehen. Ich habe übrigens Java 6, daran sollte es doch nicht liegen!?
Kann mir dabei jemand helfen? Ich wäre euch sehr dankbar, weil ich den Code sonst sehr aufwendig umschreiben muss!

Herzlichen Dank!
 
Integer statt Number geht als Rückgabewert, was du vielleicht mit 'Kovariant' meinst,
denn ein Integer-Objekt kann man auch in eine Number-Variable ablegen,

eine ArrayList<B> darf aber nicht in eine ArrayList<A>-Variable, versuche das mal zu kompilieren, ergo bei Methoden genausowenig

Java:
public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> li = new ArrayList<Integer>();
        ArrayList<Number> ln = (ArrayList)li; // mit Cast gehts
        
        ln.add(new Double(2));
        Integer k = li.get(0); // BOOM
    }
}
 
wenn du
Java:
class C {
    ArrayList<? extends A> getFoo()
}
definierst gehts.
 
Hey,

danke erstmal für die wahnsinnig schnellen Antworten. Die Lösung mit dem
Code:
<? extends A>
funktioniert wunderbar, herzlichen Dank!
 

Neue Themen


Zurück
Oben