Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #13271
| From | Patrick Roemer <sangamon@netcologne.de> |
|---|---|
| Newsgroups | de.comp.lang.java |
| Subject | Re: Generics und Wildcards |
| Date | 2019-08-22 12:04 +0200 |
| Organization | news.netcologne.de |
| Message-ID | <qjlpb9$d39$1@newsreader4.netcologne.de> (permalink) |
| References | <gs4mcmFsqvfU1@mid.individual.net> <qjjvpo$5lj$1@newsreader4.netcologne.de> <gs5jllF3ug4U1@mid.individual.net> |
Responding to Christian H. Kuhn:
> public interface LSElement<T> {
> List<T> findLegalMoves();
> LSElement<T> executeMove(T move);
> }
>
>
> public class LSNode<E extends LSElement<?>> {
> private E element;
> public LSNode<E>(final E element) {
> this.element = element;
> }
> public E getElement() {
> return this.element;
> }
> }
>
> public class LSGraph<E extends LSElement<?>> {
> public void findShortestPath(final E startNode, final E destNode){
> List<?> moves = startNode.getElement().findLegalMoves();
> fspHelper(moves, startNode);
> }
> private <M> fspHelper(final List<M> moves, final E startNode) {
> for (final M move : moves) {
> // Hier ist das Problem: executeMove mag nicht mit M.
> LSNode<E> newNode = new
> LSNode<E>(startNode.getElement().executeMove(move));
> }
> }
> }
Ich bin mir immer noch nicht sicher, ob ich Dein Problem verstehe...
Warum willst Du überhaupt den Parameter von LSElement verstecken? Der
gehört zur API. Generics/Wildcards sind IMHO kein Mechanismus zum
information hiding. Wenn Du mit Gewalt versuchst, die Typinformation
"für den Transport" zu obskurieren, wirst Du am Ziel natürlich Probleme
haben, ohne die verlorene Information klarzukommen.
Weiter sehe nicht, warum LSNode öffentlich sichtbar sein sollte - Deiner
Beschreibung nach ist das ein internes Detail der Dijkstra-Implementierung.
Naiv fände ich sowas erst mal halbwegs akzeptabel:
public static class LSGraph<T> {
public void findShortestPath(
final LSElement<T> startNode,
final LSElement<T> destNode
) {
// ...
}
}
Wenn man partout forcieren will, dass durchgehend ein Subtyp von
LSElement verwendet wird, müsste man wohl schon bei LSElement selber
anfangen, etwa:
public interface LSElement<T, E extends LSElement<T, E>> {
List<T> findLegalMoves();
E executeMove(T move);
}
> Das müsste bis auf den einen Fehler kompilierbar sein, [...]
Ist es nicht. :/
> Man sollte öfter Auto fahren, das macht den Kopf frei. Die Generics
> sollen sicherstellen, dass auf einem implementierten LSElement nur Züge
> vom richtigen Typ ausgeführt werden können. Das geht auch mit Object,
> Cast und Check.
Deine Lösung wäre, das Typsystem komplett auszuhebeln/zu umgehen...?!
Viele Grüße
Patrick
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