Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Christian H. Kuhn" Newsgroups: de.comp.lang.java Subject: Re: Generics und Wildcards Date: Thu, 22 Aug 2019 13:47:15 +0200 Lines: 58 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net yfcwl3ADvhdU9S+FwEayIwDjaPMhS/BpHWY1kVQUmO2WiUrd4= Cancel-Lock: sha1:YG/vn8Qn/8L+BAiyjfRUb/XxxpQ= User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 In-Reply-To: Xref: csiph.com de.comp.lang.java:13272 Am 22.08.2019 um 12:04 schrieb Patrick Roemer: > public static class LSGraph { > public void findShortestPath( > final LSElement startNode, > final LSElement destNode > ) { > // ... > } > } > > public interface LSElement> { > List findLegalMoves(); > E executeMove(T move); > } > Ausprobiert. Keine Änderung. LSNode und LSGraph können natürlich nicht einfach ein T mitschleppen. Das muss schon LSNode> bzw. LSGraph> 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 void fspHelper(LSNode actNode, final List moves) { for (final M move : moves) { final LSNode newNode = new LSNode<>(actNode.getElement().executeMove(move)); } } wieder den bekannten Fehler The method executeMove(capture#3-of ?) in the type LSElement 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..getClass()? lg QNo