Frage

Einfache Java Generics Frage. Ich habe zwei Klassen - von denen Generika verwendet, um seine Art zu definieren, die andere, die diese Klasse erweitert eine konkrete Art zu schaffen

public class Box<Item> {
    ...
}


public class Toolbox extends Box<Tool>{
    ...
}

Da die Toolbox erweitert Box-Werkzeug als die tatsächliche Art für den generischen Platzhalter bereitstellt, würde ich gedacht, es sollte möglich sein, so etwas zu tun:

Box<Tool> box = new Box();

Toolbox toolbox = box; 

Es scheint jedoch, dies führt zu einem Typ-Mismatch. Warum ist das?

War es hilfreich?

Lösung

Box<Item> ist der ungebundene generische Typ. Box<Tool> ist eine besondere gebundene Version des gleichen generischen Typs. Toolbox ist eine Unterklasse von Box<Tool> und somit ist eine diskrete Art von Box<Tool>.

Andere Tipps

Es ist nicht wirklich ein Problem Generika. Ihr Problem ist, dass Sie ein Objekt einer weniger spezifischen Typ einer Variablen von einer spezielleren Art sind zuweisen.

Sie würden das gleiche Problem haben, wenn Sie ein Objekt in ein String-Variable zuweisen versucht, auch wenn String-Objekt erweitert.

Sie sollten jedoch in der Lage Box<Tool> box = new Toolbox(); mit der Klassenstruktur gegeben zu schreiben. Nur eben nicht umgekehrt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top