Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #13270
| From | "Christian H. Kuhn" <qno-news@qno.de> |
|---|---|
| Newsgroups | de.comp.lang.java |
| Subject | Re: Generics und Wildcards |
| Date | 2019-08-21 21:17 +0200 |
| Message-ID | <gs5jllF3ug4U1@mid.individual.net> (permalink) |
| References | <gs4mcmFsqvfU1@mid.individual.net> <qjjvpo$5lj$1@newsreader4.netcologne.de> |
Am 21.08.2019 um 19:42 schrieb Patrick Roemer:
> Responding to Christian H. Kuhn:
>
>> Als wird LSElement<T> in LSNote<LSElement<?>> verpackt.
>
> Ich verstehe schon nicht, warum hier zwingend ein Wildcard ins Spiel
> kommen soll...
Was wäre denn die Alternative?
> Versuch mal, das Problem auf ein minimales, zusammenhängendes
> Codebeispiel zu reduzieren, das die Implementierung möglichst weglässt
> und sich nur auf die API und die Aufrufe konzentriert.
>
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));
}
}
}
Das müsste bis auf den einen Fehler kompilierbar sein, nichts
überflüssiges enthalten, und alles, was noch dazukommt, macht erst
später Probleme ;-)
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. Und dass im LSGraph alle LSNodes den gleichen Typ
LSElement beinhalten. Der Client übergibt Start- und Zielnode, das lässt
sich checken, ob die vom gleichen Typ sind. Alle anderen LSElement
werden von einer Methode des jeweiligen Typs geliefert; wenn die den
falschen Typ haben, war halt der Programmierer ein Idiot. Und auch das
ließe sich checken, das geht mir dann aber langsam zu sehr auf die
Performance. Und schließlich muss ich noch mit defensive copies dafür
sorgen, dass mir da kein LSNode oder LSElement nach den Checks unter der
Hand ausgetauscht wird. Dann habe ich alles, was ich benötige, und das
einzige, was fehlt, ist der Lerneffekt ;-)
TIA
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