eine Methode mit zwei möglichen Rückgabewerten

lafilia

Grünschnabel
Hallo,

eine vermutlich blöde Frage, aber ich weiß einfach nicht, wie ich Folgendes lösen soll:

Ich habe ein Objekt Spieler mit der Exemplarvariablen spielVerhalten.
Das Spielerobjekt hat entweder spielVerhaltenA oder spielVerhaltenB.
Auf dem Spieler wird nun eine Methode spielZug() aufgerufen, welche der Spieler eigentlich nur an sein spielVerhalten weitergibt.
Nun liefern die beiden spielVerhalten-Objekte aber verschiedene Rückgabetypen. Das eine ein int und das andere ein Array.
Dass ich das Verhalten kapsele, soll ja nun aber eigentlich dazu führen, dass ich sagen kann spieler.spielZug(), ohne dass ich weiß, was der Spieler für ein spielVerhalten hat.
Aber nun muss ich ja im Spieler bei der Implementation der Methode den Rückgabetyp angeben und würde natürlich gerne reinschreiben: int oder Array.

Mir ist bisher nichts Besseres eingefallen, als eigene Klassen zu schreiben, die Integer und Array erweitern und zusätzlich noch ein selbst definiertes Interface implementieren, nur um eine Schnittstelle zu schaffen.
Aber so ein leeres Interface, das wirklich nur als Schnittstelle gilt, ist doch irgendwie unschön, oder?

Gibt es da einen einfacheren und schöneren Weg?

Vielen Dank für die Hilfe!
 
Hallo,

warum schreibst du dir nicht einfach eine Klasse Spielverhalten, die deine Daten beinhaltet. Oder ein Interface, welches Methoden beinhaltet, um an die Informationen des Spielverhaltens dran zu kommen?

Also grob gesagt das Ziel wäre ja, dass du immer den gleichen Typ zurückbekommst und dort über bestimmte Methoden die Werte zurück bekommst. Und nicht, dass du abfragen musst ist es ein int oder ist es ein Array.

Ich kann dir aber nichts konkretes sagen, da ich dein Spiel und die einzelnen Spielverhalten nicht kenne.

Gruß

Sascha
 
Hallo,

wie wäre es wenn du z.B. IMMER ein Array zurückgibst? Im Zweifel (bei dem Fall "int" beinhaltet das Array halt nur 1 Wert. Nur so als Denkanstoss...

Gruß
DEV
 
Hi,

oder du arbeitest temporär mit einem Object. Ist zwar nicht schön (wenn man es so machen muss, dann stimmt was mit der Objektstruktur / Vererbung nicht):

Java:
Object val;

val = abc.getWert();

if(val instanceof Integer) {
  int i = (int) val;
}

if(val instanceof Array) {
  int[] a = (int[]) val;
}

Evtl stimmt das oben nicht ganz, aber vom Ansatz sollte es zeigen wie es gehen könnte.
Aber wie schon in Post #2 angemerkt solltest du deine Struktur etwas überdenken.

Gruß
BK
 

Neue Beiträge

Zurück