Objekt per If erzeugen.

DS4ever01

Mitglied
Hallo JavaFans,

leider wusste ich nicht genau wie ich das suchen soll.
Daher muss ich meine Frage stellen.
Leider weiß ich auch nicht ob mein Ansatz überhaupt richtig ist. Daher könnt ihr mich alles an Kopf werfen was euch einfällt =D

Ich habe ein String dessen Inhalt unterschiedlich sein kann.
BSP: CM, DA,OR oder TY
Abhängig vom String soll einen Objekt erstellt werden.
BSP: Object_CM unit = new Object_CM
dieses Objekt beinhaltet mehrere Methoden zum setzen von Variablen.

Das Objekt wollte ich im Programm wie folgt erzeugen (Damit ich nicht mehrmals für jedes Objekt den gleichen code verfassen muss)
Java:
public class Army {

DS_Unit cUnit = null;
....
....
public void erzeugeObject(String myString) {
   If (myString.equals("cavalry")) {
      this.cUnit = new Object_cavalry();
   } else if (myString.equals("tank")) {
      this.cUnit = new Object_tank();
   }else if(....)
      ....
}
cUnit.setUnitProfile(unitname);
....
}

Wie ihr erahnen könnt habe ich folgende Classen

DS_Army: Hier werden allgemeine Methoden aufgerufen und Objekt erzeugt.
DS_Unit: alle Variablen werden hier deklariert.
Object_cavalery extends DS_Unit: methode zum setzen von den Variablen. Hier ist eine Switch case Methode




Frage:
1. Wenn ich ein Objekt erzeugen will mit einer If anweisung, ist dies dann der richtige weg?
2. Wie greife ich dann auf die Methode der Object_tank oder _cavalery zu?
---> cUnit.setUnitProfile(String); klpat nicht, weil er hier dann auf DS_Unit zugreifen will und mir sagt, das diese Methode nicht vorhanden ist.

Fakt ist, dass ich anhand zweier unterschiedlicher Strings 1. ArmyName 2. EinheitenName auf eine Class zugreifen will und das Profil der Einheit ausgeben will. Wenn ich das alles für nur einen ArmyNamen programmiere, dann ist dies kein Problem und einfach umzusetzen. Doch macht mir das erzugen eines Objektes per If Kopfschmerzen.

Ganzen code will ich ungerne Posten, da dies ein betehendes programm ist welches ich umschreibe.

Sollte einer nun wirklich hier unten angekommen sein, dann danke für dein Interesse mir zu helfen =D

Gruß
 

benruzzer

Mitglied
Vieleicht wäre es sinnvoll eine abstrakte Klasse zu erstellen, die dann entsprechend mit den gewünschten Methoden überschrieben wird. Außerdem könntest du dann als Rückgabetyp deiner Methode die abstrakte Oberklasse wählen.
zu deiner Frage : Du erzeugst ja nicht mit einer if abfrage ein Objekt, sondern eigentlich nach der Überprüfung. Dh. du kannst ganz normal den Konstruktor aufrufen
 

Meeresgott

Bekanntes Mitglied
Ich würde statt if else switch,case nehmen.

Deine Objekte Objekt_cavalry und Objekt_tank müssen DS_Unit implementieren oder erweitern.

z.B. könntest du in DS_Unit die Methoden bewegen () und angreifen() haben. Diese kannst du dann aufrufen und wie sich bewegt würdest du dann in die erweiterte Klasse schreiben. (Wäre das mit der abstrakten klasse)
 

JStein52

Top Contributor
cUnit.setUnitProfile(unitname);
Das hier wird so nicht gehen wenn diese Methode in der Klasse DS_Unit nicht bekannt ist. Du musst unterscheiden zwischen Compile-Zeit und Laufzeit. Zur Compile-Zeit zeigt die Referenz cUnit auf ein Objekt der Klasse DS_Unit und da gibt es eben diese Methode nicht. Zur Laufzeit würde er schon die richtige Methode aufrufen wenn du z.B. auf eine cavalry casten würdest. Aber das ist auch so eine Sache weil du zur Compilezeit wiederum nicht weisst auf was du denn casten sollst.
Also ist es am richtigsten wenn alle Methode die die auf diese Art aufrufen willst in der Superklasse definiert sind und in den Subklassen überschrieben werden.
Und ob du deine Abfragen mit if/else oder switch/case machst ist so was von wurscht. Richtig war es jedenfalls wie du es hattest.
 

DS4ever01

Mitglied
Hi zusammen,
das mir hier ein Konzept fehlt? dachte habe mein Konzept ausführlich beschrieben.

Aber danke dir JStein anscheinend bin ich nicht auf dem Holzweg. Werde mal rumprobieren und die Tage mich erneut melden.
Schönes WE euch allen ! =)
 

JAVAKEK

Mitglied
Kann man doch prima Reflections benutzten oder verstehe ich hier die Frage falsch?
Code:
interface DS_Unit {
...
}

class DS_Unit_Factory {

public static DS_Unit createClass(String name) {
DS_Unit unit = null;
  
  Class c = Class.forName(name);
  unit = (DS_Unit) c.getDeclaredConstructor().newInstance();

return unit;
}
}

*Code ist gerade aus dem Kopf heraus
 

JStein52

Top Contributor
Kann man doch prima Reflections benutzten oder verstehe ich hier die Frage falsch?
Ja, ich glaube die Frage hast du ein bisschen falsch verstanden. Das Erzeugen der Objekte ist ja nicht das Problem. Das hat er ja schon richtig gehabt. Er möchte nun Methoden aufrufen die die Klasse DS_Unit nicht kennt. Und das wiederum könnte man natürlich auch via Reflections machen. Das halte ich aber für etwas overkilled. Das einfachste ist diese Methoden in der DS_Unit zu deklarieren. Abstrakt oder auch nicht. Das hängt von den beteiligten Klassen ab, z.B. will man auch Instanzen von DS_Unit erzeugen ? Oder "darf" man überhaupt diese DS_Unit-Klasse verändern ?
 

Kababär

Top Contributor
Habe zuerst auch kurz darüber nachgedacht, wie es ist abstrakte Klassen zu verwenden bis ich dein Extends sah. Und außerdem würde da je nach Methodenhaufen der Code für das Modellieren auch ganz schön stramm aussehen.

Du versuchst je nachdem eine der zwei Klassen in DS_Unit zu speichern?
Also was ich seltsam finde, ist dass du die Variablen in einer Klasse deklarierst, aber sie in einer initialisierst. Wieso trennst du diese Verfahren und packst sie nicht in eine Klasse? Wenn ich das richtig verstehe, repräsentieren diese beiden Klassen dein Model.

Aufgrund dessen, wenn du die Variablenhandhabung hast, kannst du mit DS_Army deine Methoden aufrufen.

Es gibt viele Wege das zu realisieren. Du könntest auch mit Enum oder selbst implementierten TYPE... arbeiten.
Aber was auf jeden Fall nicht geht, ist, dass du versuchst ein Objekt einem anderen Objekt zuzuordnen, wenn diese vollständig unabhängig voneinander sind.
 

JStein52

Top Contributor
Wieso trennst du diese Verfahren und packst sie nicht in eine Klasse?
Wir wissen zu wenig über die Variablen und die Klassen. Aber es kann doch Sinn machen die Variable in einer Superklasse zu definieren, die Art und Weise wie sie gefüllt/initialisiert werden muss aber in den Subklassen jeweils klassenspezifisch realisiert werden.
Du versuchst je nachdem eine der zwei Klassen in DS_Unit zu speichern?
Ja , er hat eine Variable cUnit die auf Objekte vom Typ DS_Unit zeigen kann. Und das können dann entweder cavalry-Objekte oder tank-Objekte sein (evtl. noch weitere). Soweit auch noch ganz normal. Alles was er jetzt noch schaffen muss ist dem Compiler klarzumachen dass cUnit auf ein Objekt zeigt das die Methode "setUnitProfile(String)" kennt. Und DS_Unit kennt diese eben (noch) nicht. Einfachste Lösung: DS_Unit mit einer abstrakten Methode mit dieser Signatur versehen, wie ja schon ganz oben mal vorgeschlagen wurde.

Was würde bei der Lösungsfindung denn ein Enum oder ein selbstimplementierter TYPE helfen, das habe ich nicht verstanden ?
 

Kababär

Top Contributor
Dass es sich um Vererbung handelt, habe ich leider übersehen bzw ist hier nicht explizit zu erkennen gewesen, wenn nur etwas indirekt in der Problemstellung.

Also entweder trennt man die Objekte oder man ruft eine abstrakte Klasse ins Leben. Anders kann ich es mir imho auch nicht vorstellen.

Naja ich dachte da so etwas wie einen Identifier, der später bei verschiedenen Methoden helfen könnte. Beispielsweise wenn caval.. Und Tank.. die gleiche Methode implementieren und der Verlauf sich verändert, je nachdem welches Objekt sie gerade aufruft. Aber das wäre nur eine kleine Spielerei, letztendlich doch keine Problemlösung..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
G Objekt der selben Klasse wie selbst mit Aufrufen des Konstruktors erzeugen Java Basics - Anfänger-Themen 14
B OOP Objekt in IF erzeugen - funktioniert nicht so richtig Java Basics - Anfänger-Themen 11
P Objekt mit =new in Methode erzeugen Java Basics - Anfänger-Themen 4
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
J Objekt mit Methodendruchlauf erzeugen Java Basics - Anfänger-Themen 1
P Vererbung Neues Objekt aus Vorlage erzeugen Java Basics - Anfänger-Themen 1
P Kapselung Variable innerhalb einer inneren Klasse ansprechen ohne ein Objekt erzeugen zu müssen? Java Basics - Anfänger-Themen 6
M Neues Objekt erzeugen mit Klassennamen oder ohne Java Basics - Anfänger-Themen 5
X Objekt erzeugen aus einem XML Datei Java Basics - Anfänger-Themen 15
B Warum ein Objekt mit zweimal new erzeugen? Java Basics - Anfänger-Themen 14
J Methode ausgeben(Objekt erzeugen) Java Basics - Anfänger-Themen 13
S Objekt in Objekt erzeugen Java Basics - Anfänger-Themen 2
L Objekt erzeugen mit eigenem typ Java Basics - Anfänger-Themen 5
M Verständnisfrage: Objekt erzeugen u. zuweisen Java Basics - Anfänger-Themen 16
M Kann kein Objekt (AudioFile in diesem Beispiel) für ein leeren String erzeugen Java Basics - Anfänger-Themen 3
S Objekt mehrfach erzeugen Java Basics - Anfänger-Themen 3
P Kann ich ein Objekt vom Typ Interface erzeugen? Java Basics - Anfänger-Themen 4
R String einlesen, Textdatei danach durchsuchen und aus Zeile Objekt erzeugen Java Basics - Anfänger-Themen 5
S objekt erzeugen Java Basics - Anfänger-Themen 6
C Objekt von Klasse im gleichen Paket erzeugen Java Basics - Anfänger-Themen 8
K Objekt erzeugen. Java Basics - Anfänger-Themen 1
B neues Objekt erzeugen Java Basics - Anfänger-Themen 7
G objekt der selben klasse erzeugen Java Basics - Anfänger-Themen 4
F Objekt aus anderem Objekt erzeugen Java Basics - Anfänger-Themen 6
G Date Objekt für aktuelles Datum erzeugen Java Basics - Anfänger-Themen 9
B Array mehrmals als Objekt erzeugen Java Basics - Anfänger-Themen 17
T Möchte ein neues Objekt erzeugen mit Wert von anderem Objekt Java Basics - Anfänger-Themen 9
B Aus gegebenem String Objekt erzeugen Java Basics - Anfänger-Themen 5
S Problem neues Objekt erzeugen Java Basics - Anfänger-Themen 4
N Class-Objekt aus File-Objekt erzeugen? Java Basics - Anfänger-Themen 14
pro_progger Image-Objekt erzeugen ? Java Basics - Anfänger-Themen 7
J Objekt aus anderer Klasse und Package erzeugen Java Basics - Anfänger-Themen 11
R leeres Feld im GridLayout (dummy Objekt erzeugen?) Java Basics - Anfänger-Themen 2
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
Rxiiz Objekt aus ComboBox entfernen Java Basics - Anfänger-Themen 4
I JSON in Objekt umwandeln Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
B Objekt aus generalisierter Liste entfernen Java Basics - Anfänger-Themen 11
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
Say Objekt Java Basics - Anfänger-Themen 4
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
M BlueJ Objekt in Objektliste Java Basics - Anfänger-Themen 2
B Objekt in Klassendiagramm an fremdes Objekt weiterreichen? Java Basics - Anfänger-Themen 6
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
amelie123456 Objekt Farbe Quellcode Java Basics - Anfänger-Themen 4
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
melaniemueller Fernseher als Objekt Java Basics - Anfänger-Themen 9
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
S Aufzurufendes Objekt Java Basics - Anfänger-Themen 3
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Objekt-Array dynamischer Länge aus Benutzereingaben erstellen Java Basics - Anfänger-Themen 6
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
N LocalTime einem Objekt zuweisen Java Basics - Anfänger-Themen 2
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
J Y-Koordinate von GUI-Objekt bestimmen Java Basics - Anfänger-Themen 2
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
J Objekt bei Auswahl in jList ändern Java Basics - Anfänger-Themen 6
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben