Hallo,
in einem anderen Thread hat jmd gefragt, wie er am besten folgende Situation designed:
Er hat eine Klasse die u.a. eine Methode getTerminal() hat. Im Moment returned die String.
Nun hat er an einer globalen Stelle im Programm eine Liste solcher Terminal-Infos.
Im Moment natürlich List<String>.
Die Frage war: Was ist, wenn sich das ändert? Wenn man zB keinen einfachen String
mehr haben möchte, sondern ein komplexes Objekt einer neuen Klasse, oder sonst was?
Meine Idee war folgende:
[HIGHLIGHT="Java"]Interface TerminalSymbol<T>{
public <T> getTerminal()
}[/HIGHLIGHT]
Eine Implementierung davon könnte das T nun durch String erstezen, eine andere
könnte es durch ein komplexe Objekt ersetzen.
Auf jeden Fall hat man aber an der globalen Stelle nun eine Liste
[HIGHLIGHT="Java"]List<TerminalSymbol>
[/HIGHLIGHT]
und da steckt dynamisch zur Laufzeit das drin, von welcher Implementierung ein Objekt
des Interfaces TerminalSymbol ist.
Sprich wenn man die Liste durchläuft und auf jedem TerminalSymbol ein .getTerminal()
auführt, bekommt man Strings, andere Objekte, whatever.
Es muss nicht mal gemischt sein, sondern wäre ja schon toll, wenn man nix weiter machen
muss als eine neue Interface-Implementierung zu erstellen, und schon nutzen bestimmte
Objekte die neue Implementierung, und returnen keinen String mehr sondern was anderes.
So.. ich hoffe es kommt rüber was das Ziel ist?
Problem: Der code des o.g. Interfaces lässt sich nicht kompilieren.
Geht sowas irgendwie, mit richtiger Anwendung von Generics/Wildcards?
Vielen Dank
in einem anderen Thread hat jmd gefragt, wie er am besten folgende Situation designed:
Er hat eine Klasse die u.a. eine Methode getTerminal() hat. Im Moment returned die String.
Nun hat er an einer globalen Stelle im Programm eine Liste solcher Terminal-Infos.
Im Moment natürlich List<String>.
Die Frage war: Was ist, wenn sich das ändert? Wenn man zB keinen einfachen String
mehr haben möchte, sondern ein komplexes Objekt einer neuen Klasse, oder sonst was?
Meine Idee war folgende:
[HIGHLIGHT="Java"]Interface TerminalSymbol<T>{
public <T> getTerminal()
}[/HIGHLIGHT]
Eine Implementierung davon könnte das T nun durch String erstezen, eine andere
könnte es durch ein komplexe Objekt ersetzen.
Auf jeden Fall hat man aber an der globalen Stelle nun eine Liste
[HIGHLIGHT="Java"]List<TerminalSymbol>
[/HIGHLIGHT]
und da steckt dynamisch zur Laufzeit das drin, von welcher Implementierung ein Objekt
des Interfaces TerminalSymbol ist.
Sprich wenn man die Liste durchläuft und auf jedem TerminalSymbol ein .getTerminal()
auführt, bekommt man Strings, andere Objekte, whatever.
Es muss nicht mal gemischt sein, sondern wäre ja schon toll, wenn man nix weiter machen
muss als eine neue Interface-Implementierung zu erstellen, und schon nutzen bestimmte
Objekte die neue Implementierung, und returnen keinen String mehr sondern was anderes.
So.. ich hoffe es kommt rüber was das Ziel ist?
Problem: Der code des o.g. Interfaces lässt sich nicht kompilieren.
Geht sowas irgendwie, mit richtiger Anwendung von Generics/Wildcards?
Vielen Dank