Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #13267
| From | "Christian H. Kuhn" <qno-news@qno.de> |
|---|---|
| Newsgroups | de.comp.lang.java |
| Subject | Re: Generics und Wildcards |
| Date | 2019-08-21 17:32 +0200 |
| Message-ID | <gs56g2F14hvU1@mid.individual.net> (permalink) |
| References | <gs4mcmFsqvfU1@mid.individual.net> <qjjjrs$14gi$1@news-cypress.fernuni-hagen.de> |
Erstmal gute Besserung! Am 21.08.2019 um 16:18 schrieb Michael Paap: > Wenn das völlig an deinem Verständnisproblem vorbeigeht, bitte ich um > Entschuldigung, siehe oben. Wenn ich wüsste, ob es vorbeigeht, wäre ich schon weiter :-) Ich schaue nach LSElements<T>. findLegalMoves() ist ein Producer und könnte daher auch eine List<? extends T> liefern. executeMove(T move) ist ein Consumer und könnte auch ein <? super T> verarbeiten. Ich will aber bei beiden GENAU ein T haben. Welches T ich habe, weiß das Interface nicht, sondern nur der, der es implementiert. In findShortestPath(LSNode, LSNode) bekomme ich eine Liste von Zügen durch Aufruf von findLegalMoves. Den Typ der moves kann ich nicht vorhersagen, daher muss ich eine List<?> benutzen. Mit der kann ich kaum arbeiten. Durch die Hilfsmethode bekomme ich den Typ heraus. Da steht in der Parameterliste eine List<M>, es wird eine List<?> übergeben, durch type inference wird nachgeschaut, was M ist, und im Inneren der privaten Hilfsmethode kann ich M verwenden. Bis hierhin funktionier ja alles, im Zusammenhang mit List wird da nirgendwo gemeckert. Jetzt bin ich ja immer noch an einer Stelle, an der der Compiler nichts von einer Implementation von LSElement<T> weiß. Der schaut nur, ob executeMove(T move) einen passenden Parameter hat. Und ich glaube, ich beginne zu ahnen, wo es klemmt. Im Kopf von LSGraph steht LSGraph<LSElement<?>>. Der Typparameter für den Zug ist also ?. Das Interface LSElement<T> wird also nicht einfach so oder mit einem festen Typparameter nachgeschaut, sondern mit ?. Damit hab ich auch ein executeMove(? move), und daher geht da gar nichts mehr. Ok, ich fange an zu begreifen, worin das Problem besteht. Ich sehe aber immer noch nur die beiden Lösungen, die mir nicht gefallen: Entweder nehme ich LSElement ohne generischen Typ und muss den Zugtyp als Object mit allen Casts und Checks implementieren. Oder ich ändere auf LSGraph<Move, LSElement<Move>>, dann muss der Benutzer von LSGraph Interna der benutzten Implementation von LSElement kennen. Gibt es da denn keine saubere generische Lösung? lg QNo
Back to de.comp.lang.java | Previous | Next — Previous in thread | Next in thread | Find similar
Generics und Wildcards "Christian H. Kuhn" <qno-news@qno.de> - 2019-08-21 12:57 +0200
Re: Generics und Wildcards Michael Paap <feunews@mpaap.de> - 2019-08-21 16:18 +0200
Re: Generics und Wildcards "Christian H. Kuhn" <qno-news@qno.de> - 2019-08-21 17:32 +0200
Re: Generics und Wildcards "Christian H. Kuhn" <qno-news@qno.de> - 2019-08-21 18:06 +0200
Re: Generics und Wildcards Patrick Roemer <sangamon@netcologne.de> - 2019-08-21 19:42 +0200
Re: Generics und Wildcards "Christian H. Kuhn" <qno-news@qno.de> - 2019-08-21 21:17 +0200
Re: Generics und Wildcards Patrick Roemer <sangamon@netcologne.de> - 2019-08-22 12:04 +0200
Re: Generics und Wildcards "Christian H. Kuhn" <qno-news@qno.de> - 2019-08-22 13:47 +0200
Re: Generics und Wildcards Patrick Roemer <sangamon@netcologne.de> - 2019-08-22 14:45 +0200
Re: Generics und Wildcards Patrick Roemer <sangamon@netcologne.de> - 2019-08-25 19:36 +0200
Re: Generics und Wildcards "Christian H. Kuhn" <qno-news@qno.de> - 2019-08-28 22:08 +0200
Re: Generics und Wildcards Patrick Roemer <sangamon@netcologne.de> - 2019-08-29 11:11 +0200
Re: Generics und Wildcards "Christian H. Kuhn" <qno-news@qno.de> - 2019-08-29 23:56 +0200
Re: Generics und Wildcards Patrick Roemer <sangamon@netcologne.de> - 2019-08-22 15:43 +0200
Re: Generics und Wildcards "Christian H. Kuhn" <qno-news@qno.de> - 2019-08-22 16:55 +0200
csiph-web