Wildcard



  • huhu ihrs,
    ich hab gerade angefangen mich mit Generics zu beschäftigen und hab mir grad die wildcards angeschaut...

    In meinem Skript steht u.a. folgendes:
    <? extends Object>
    bezeichnet die Menge aller Typen, die vom Typ Object abgeleitet sind,
    und es entspricht <?>

    Wenn dem so ist verstehe ich nicht warum folgendes Beispiel nicht funktioniert:

    Error:
    The method push(capture#2-of ? extends Object) in the type Stack<capture#2-of ? extends Object> is not applicable for the arguments (Integer)

    import java.util.Stack;
    
    public class Test
    {
    	public static void main(String [] args)
    	{
    		Stack<? extends Object> f;
    		f = new Stack<Integer>();
    		f.push(new Integer(1) );
    	}
    }
    

    Danke schonmal für Antworten 🙂



  • der typ ist: ? extends Object, daraus folgt, dass ? ein unbekannter untertyp von Object ist
    wissen wir also ob ?(unbekannter typ) ein supertyp von integer ist?



  • golden_jubilee schrieb:

    der typ ist: ? extends Object, daraus folgt, dass ? ein unbekannter untertyp von Object ist
    wissen wir also ob ?(unbekannter typ) ein supertyp von integer ist?

    joa wissen wir weil jede Klasse "Object" als Superklasse hat.



  • golden_jubilee schrieb:

    wissen wir also ob ?(unbekannter typ) ein supertyp von integer ist?

    ? ist eine "speziellere sicht" von object

    genau so ist Intger eine "spezieller sicht" von object

    dh aber noch lange nicht das ? eine "speziellere sicht" von Integer ist ...

    ? könnte zb auch String oder List oder was auch immer sein ...



  • Wenn du deine Variable deklarierst musst du schon <Integer> schreiben das ? extends Object nimmst du wenn du eigene generische Klassen oder Methoden anlegst



  • Dweb schrieb:

    golden_jubilee schrieb:

    der typ ist: ? extends Object, daraus folgt, dass ? ein unbekannter untertyp von Object ist
    wissen wir also ob ?(unbekannter typ) ein supertyp von integer ist?

    joa wissen wir weil jede Klasse "Object" als Superklasse hat.

    nein

    http://openbook.galileocomputing.de/javainsel8/javainsel_09_001.htm#mj4b0e123c16c27f462cf6929c2f350e34

    Das Fragezeichen in der Angabe steht für alle Boxen und für alle Untertypen T im Fall von Box<T>. Es ist wichtig zu verstehen, dass ? nicht für Object steht, sondern für einen unbekannten Typ!



  • ok danke euch 🙂


Anmelden zum Antworten