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


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

Re: Generics und Wildcards

From "Christian H. Kuhn" <qno-news@qno.de>
Newsgroups de.comp.lang.java
Subject Re: Generics und Wildcards
Date 2019-08-22 13:47 +0200
Message-ID <gs7dm4Ffp3sU1@mid.individual.net> (permalink)
References <gs4mcmFsqvfU1@mid.individual.net> <qjjvpo$5lj$1@newsreader4.netcologne.de> <gs5jllF3ug4U1@mid.individual.net> <qjlpb9$d39$1@newsreader4.netcologne.de>

Show all headers | View raw


Am 22.08.2019 um 12:04 schrieb Patrick Roemer:
> public static class LSGraph<T> {
>   public void findShortestPath(
>       final LSElement<T> startNode,
>       final LSElement<T> destNode
>   ) {
>     // ...
>   }
> }
> 
> public interface LSElement<T, E extends LSElement<T, E>> {
>   List<T> findLegalMoves();
>   E executeMove(T move);
> }
> 

Ausprobiert. Keine Änderung.

LSNode und LSGraph können natürlich nicht einfach ein T mitschleppen.
Das muss schon

LSNode<E extends LSElement<?, E>>

bzw.

LSGraph<E extends LSElement<?, E>>

sein. Und damit habe ich wieder eine Wildcard drin und komme auf die
gleiche Problematik in findShortesPath(startNode, destNode):

final List<?> moves = actNode.getElement().findLegalMoves();

erfordert eine private Hilfsmethode zum wildcard capture. Und hier liefert

    private <M> void fspHelper(LSNode<E> actNode, final List<M> moves) {
	for (final M move : moves) {
	    final LSNode<E> newNode = new
LSNode<>(actNode.getElement().executeMove(move));
         }
    }

wieder den bekannten Fehler

The method executeMove(capture#3-of ?) in the type
LSElement<capture#3-of ?,E> is not applicable for the arguments (M)

> Warum willst Du überhaupt den Parameter von LSElement verstecken?
Ich dachte, das ist offensichtlich. Welche Klasse als Representation
eines Spielzugs benutzt wird, ist implementationsabhängig und am besten
vor den Benutzern zu verstecken. Wenn ich LSElement implementiere und
den Zugtyp an LSGraph etc. übergeben muss, darf ich später, wenn ich die
Klasse des Zugs ändere, nicht nur die Klasse ändern, sondern auch jeden
Code außerhalb. Daher gehört IMHO der Zugtyp eingekapselt.

Gibt es denn nicht sowas wie LSElement.<T>.getClass()?

lg
QNo

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