T17 Generics - Untere Schranke

fl4$h g0rd0n
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 115
Registriert: 1. Okt 2007 22:20

T17 Generics - Untere Schranke

Beitrag von fl4$h g0rd0n »

Hi,

ich verstehe das auf T17-31/32 gezeigte Beispiel nicht. Der Typ des Rückgabewertes der Funktion soll dem Typen, den die übergebene Collection speichert, entsprechen (also String im Beispiel). Wieso wird als Lösung vorgeschlagen, den Methodenkopf in

Code: Alles auswählen

static <T> T flushAll(Collection<? super T> c, Sink <T> sink)
zu ändern?

T ist doch nach wie vor Object. Müsste es nicht lauten:

Code: Alles auswählen

static <T> T flushAll(Collection<T> c, Sink <? super T> sink)


Kann mir das jemand bitte erklären? *verwirrt*
"Education is the path from cocky ignorance to miserable uncertainty" -- Mark Twain

Wambolo
Computerversteher
Computerversteher
Beiträge: 381
Registriert: 18. Okt 2007 11:36

Re: T17 Generics - Untere Schranke

Beitrag von Wambolo »

...eigentlich solltest du recht haben. Meiner Meinung nach müssten die Typn im vorgeschlagenen Beispiel wieder inkompatibel zu einander sein, wenn nämlich sink vom Typ Object ist, und c vom Typ String, dann könnte ja T(in flushAll) nur Object sein und <? super Object> mit String ist nicht möglich, oder?

Wäre schön wenn noch jemand was dazu sagen könnte, denn ich bin auch noch etwas wacklig wenns um Generics geht.
Interpreter/Parser reported on Nov 12, 2008 8:30:04 PM:
Number too big (102 > 42).

ChristianK
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 127
Registriert: 13. Sep 2007 01:15
Wohnort: Darmstadt
Kontaktdaten:

Re: T17 Generics - Untere Schranke

Beitrag von ChristianK »

Ja das gibt bei mir sogar ne Fehlermeldung, wenn ichs in eclipse eingebe...

Benutzeravatar
guido
Computerversteher
Computerversteher
Beiträge: 380
Registriert: 30. Nov 2003 21:24
Wohnort: Mühltal
Kontaktdaten:

Re: T17 Generics - Untere Schranke

Beitrag von guido »

ChristianK hat geschrieben:Ja das gibt bei mir sogar ne Fehlermeldung, wenn ichs in eclipse eingebe...
Folgender Code funktioniert:

Code: Alles auswählen

public static <T> T writeAll(Collection<T> coll, Sink<? super T> snk) {
   T last = null;
   for (T e: coll) {
     System.err.println(e);
     last = e;
     snk.flush(e);
   }
   return last;
}
// irgendwo...:

   Sink<Object> sink = new ConcreteSink<Object>();
   Collection<String> cs = new LinkedList<String>();
   cs.add("1");
   cs.add("11");
   cs.add("1111");
   String str = (String)writeAll(cs, sink);  
   System.err.println(str);
Entschuldigt bitte die Verwirrung, aber das stammt so (wie es oben nicht kompilierte!) aus den Tutorials zu Generics sowie einer Ausarbeitung...

Guido

Antworten

Zurück zu „Archiv“