Pattern gesucht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
TRex
Moderator
Beiträge: 8339
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Pattern gesucht

Beitrag von TRex » 24.05.2008 17:29:35

Hab mich gestern mit nem Kollegen unterhalten...und zwar gehts um das folgende:

Eine Methode generiert zu einem Parameter bestimmten Typs einen anderen Typ, der verschieden sein kann. Die zurückgegebenen Objekttypen haben keinen gemeinsamen Nenner, also kein gemeinsames Interface.

Momentan mach ichs so, dass ich auf der aufgerufenen Seite Object zurückgebe und auf der aufrufenden Seite dieses mittels .getClass() == Antwort.class zurückparse, aber das ist irgendwie so statisch...schwer erweiterbar und ich muss den Typ innerhalb der if-Struktur anlegen (weil ich erst da drin entscheiden kann...).

Gibts dafür ne bessere Lösung? Die verwendete Programmiersprache ist Java; in C++ geht sowas sicher mit Templates ;)
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: Pattern gesucht

Beitrag von finupsen » 24.05.2008 18:24:09

moin,

also kann sein das ich das komplett falsch verstanden habe. Wenn ja, einfach ignorieren ;)

wenn ich ein "object" habe dessen typ ich momentan nicht kenne (oder nicht kennen kann)
benutze ich "instanceof".

beispiel:

Code: Alles auswählen

String str;
Integer itr;

if (obj instanceof String) {
  str=(String)obj;
} else if (obj instanceof Integer) {
  itr=(Integer)obj; 
} else ...
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
TRex
Moderator
Beiträge: 8339
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Pattern gesucht

Beitrag von TRex » 24.05.2008 19:39:37

Na gut, so gehts auch, aber eigentlich machst du nichts anderes als ich mit

Code: Alles auswählen

if (lResponse.getClass() == PossibleResponseType.class)
{...}
else if (...)
{...}
Die Frage ist ja, kann man das verallgemeinern, sodass ich aus dem if rauskomm?

Wünschenswert:

Code: Alles auswählen

??? = gibmirwas(MeinObjekt)

....

return EinAnderesObjekt;
wobei EinAnderesObjekt eben von der Antwort stammt, deren genauen Rückgabetyp ich nicht kenne.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: Pattern gesucht

Beitrag von finupsen » 24.05.2008 19:56:24

naja, es ist schon ein unterschied, ob ich == oder "instanceof" mache. Dürfte klar sein.
Bezogen auf dein beispiel ist es vergleichbar.

> Die Frage ist ja, kann man das verallgemeinern, sodass ich aus dem if rauskomm?

Ja, mit interfaces. Sie habe ja etwas gemeinsames. L.t. deinem beispiel sind es response-objekte.
Eine andere möglichkeit ausser "interface" bzw. von einer abstract-class abzuleiten sehe ich da nicht.
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Benutzeravatar
TRex
Moderator
Beiträge: 8339
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Pattern gesucht

Beitrag von TRex » 28.05.2008 16:11:26

Na gut, da es per Vorgabe keine Oberklasse dieser Objekte und kein Interface gibt, muss ich wohl damit zurechtkommen, die einzeln zurechtzupflücken.

Ich kann die API von dem System halt nicht verändern, sonst gäbe es dieses Interface schon lange ;)
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Antworten