tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von isaias_b
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
706
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Steve222 Steve222 ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Ort
    Rheinland
    Beiträge
    46
    Hallo!

    Gegeben sind zwei Listen:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
             List<Number> list14 = null;
             List<? super Integer> list15 = null;  
     
             //list14 = list15; //  Compilerfehler incompatible types   //Zeile 3
     
             list15 = list14;  //  Zeile 4,  OK
           
             // <? super Integer> bedeutet:  <Integer> und alle Super-Klassen von <Integer>

    Kann mir jemand erklären, warum die Zuweisung in Zeile 4 in Ordnung ist?
    Im konkreten Fall könnte da eine Typ-Zuweisung "<Integer> = <Number>" sein,
    was, denke ich, nicht passt.

    Kann man es so deuten, dass der Compiler großzügig bzw. wohlwollend entscheidet,
    weil bei Zuweisung "<? super Integer> = <Number>" könnte auch
    Typ-Zuweisung "<Number> = <Number>" sein oder auch
    Typ-Zuweisung "<Object> = <Number>"
    sein, was ja passt.

    Viele Grüße

    Steve222
     

  2. #2
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Number ist super klasse von Integer! Warum sollte das also nicht funktionieren?

    http://download.oracle.com/javase/1.5.0/docs/api/ Integer findest du unter Java.lang

    und da steht Integer extends Number
     

  3. #3
    isaias_b isaias_b ist offline Mitglied
    Registriert seit
    Jul 2010
    Beiträge
    14
    Hallo wakoz,

    Deine Zuweisung "list14 = list15;" geht nicht weil das die Verträge brechen würde die man an die generischen Typen spezifiziert hat. Du sagst list15 soll eine Liste sein in der Elemente sind die beliebigen Typs, jedoch Superklasse von Integer sein soll.
    An diese darfst du nun verschiedene Listen zuweisen wie eine Liste vom Typ Object (#4) oder Number(#5). An eine Number Liste darf aber nur eine Number Liste zugewiesen werden.

    Vielleicht hilft dir das weiter.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    List<Number> numberList = null;
    List<? super Integer> superList = null;
    List<Object> objectList = null;
    List<? super Number> superNumberList = null;
     
    objectList = numberList; // compiler fehler #1
    //List<Object> = List<Number> nicht erlaubt
    //auch wenn in einer object list durchaus Number
    //instanzen auftauchen dürfen
    numberList = superList; // compiler fehler #2
    //List<Number> = List<? super Integer>
    //an eine Number Liste dürfen nur Number Listen
    //zugewiesen werden, die superList könnte aber
    //eine objectList sein
    numberList = objectList; // compiler fehler #3
    //siehe oben
     
    superList = objectList; // erlaubt #4
    //List<? super Integer> = List<Object>
    //Object ist super typ von Integer
    superList = numberList; // erlaubt #5
    //List<? super Integer> = List<Number>
    //genau wie Number 
     
    superNumberList = superList; // compiler fehler #6
    //superList könnte auch Integer haben
    //Integer ist aber kein super typ von Number
    superList = superNumberList; // erlaubt #7

    greez isaias
     

  4. #4
    wakoz wakoz ist offline Mitglied Gold
    Registriert seit
    Apr 2010
    Beiträge
    114
    Zitat Zitat von isaias_b Beitrag anzeigen
    Hallo wakoz,

    Deine Zuweisung "list14 = list15;" geht nicht weil das die Verträge brechen würde die man an die generischen Typen spezifiziert hat. Du sagst list15 soll eine Liste sein in der Elemente sind die beliebigen Typs, jedoch Superklasse von Integer sein soll.
    An diese darfst du nun verschiedene Listen zuweisen wie eine Liste vom Typ Object (#4) oder Number(#5). An eine Number Liste darf aber nur eine Number Liste zugewiesen werden.

    Vielleicht hilft dir das weiter.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    List<Number> numberList = null;
    List<? super Integer> superList = null;
    List<Object> objectList = null;
    List<? super Number> superNumberList = null;
     
    objectList = numberList; // compiler fehler #1
    //List<Object> = List<Number> nicht erlaubt
    //auch wenn in einer object list durchaus Number
    //instanzen auftauchen dürfen
    numberList = superList; // compiler fehler #2
    //List<Number> = List<? super Integer>
    //an eine Number Liste dürfen nur Number Listen
    //zugewiesen werden, die superList könnte aber
    //eine objectList sein
    numberList = objectList; // compiler fehler #3
    //siehe oben
     
    superList = objectList; // erlaubt #4
    //List<? super Integer> = List<Object>
    //Object ist super typ von Integer
    superList = numberList; // erlaubt #5
    //List<? super Integer> = List<Number>
    //genau wie Number 
     
    superNumberList = superList; // compiler fehler #6
    //superList könnte auch Integer haben
    //Integer ist aber kein super typ von Number
    superList = superNumberList; // erlaubt #7

    greez isaias
    *gg* nicht meine zuweisung

    und dan war die farge: Warum geht list15 = list14; also wie bei dir #5 superList = numberList;

    list15 ist zwar von beliebigen Typ aber Rückgabe ist Supertyp Integer, als return type geht nur Number oder Objekt. Die super typen von Integer halt.

    list14 ist vom typ Number, welches Teilmenge von Integer ist. Außerdem ist die Zuweisung von Konkreter Liste zu Allgemeiner liste. 15 ist eine Allgemeine liste die alles aufnehmen, aber nur Number und Object zurückgeben kann.


    PS: dieser Thread existiert zwei mal http://www.tutorials.de/algorithmen-...r-integer.html
    Geändert von wakoz (19.02.11 um 22:20 Uhr) Grund: Edit
     

  5. #5
    isaias_b isaias_b ist offline Mitglied
    Registriert seit
    Jul 2010
    Beiträge
    14
    Huch gleich doppelt vertan...
    falsche Antwort & falscher Adressat
    Eigentlich wollte ich deine Aussage untermauern, irgendwie hab ich dabie den Fokus verloren...

    my bad
    wakoz bedankt sich. 

Ähnliche Themen

  1. Generics Syntax
    Von Lastlord im Forum Java
    Antworten: 5
    Letzter Beitrag: 03.11.10, 08:50
  2. Generics
    Von bRainLaG im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.12.09, 12:42
  3. Generics
    Von Conkerchen im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 1
    Letzter Beitrag: 31.05.09, 19:18
  4. Covariance für .Net Generics?
    Von Thomas Darimont im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 10.06.08, 15:44
  5. Generics Problem
    Von Iam_Fiction im Forum Java
    Antworten: 3
    Letzter Beitrag: 13.01.08, 14:59