Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.java > #13271

Re: Generics und Wildcards

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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