Parameterübergabe per Reflection

Xalker

Mitglied
Hallo,

Ich habe zur Zeit folgende Aufrufe:
Java:
int i = 5;
String s =  "Text";

InterfaceDatenobject = fabrik.erstelle(i)
InterfaceDatenobject = fabrik.erstelle(s)
Die Methode "erstelle" gibt es zweimal (1. mit Übergabeparameter int und 2. mit String)

Ich möchte das gerne ändern in:

Java:
int i = 5;
String s =  "Text";
Object o;
o = i;
InterfaceDatenobject = fabrik.erstelle(o);
o = s;
InterfaceDatenobject = fabrik.erstelle(o);

Da "o" vom Typ Object ist, stimmt der Typ der Übergabevariable nicht. Gibt es trotzdem eine Möglichkeit? Ich habe an so was gedacht wie "getClass().getSimpleName()", aber irgendwie kriege ich es nicht hin.

Danke.
 

Xalker

Mitglied
Die Zeile war falsch:
Java:
// falsch
//  InterfaceDatenobject = fabrik...
// richtig
InterfaceDatenobject i1 = fabrik....

Sorry.
 
A

asdfghjl

Gast
Was ist so schlimm daran, dass es die Methode "zweimal" gibt?
Du könntest auch eine Methode erstelle(Object) machen, aber dann musst Du ja in der Methode irgendwie entscheiden was passieren soll.
 

Xalker

Mitglied
Eine Methode erstelle(Object) zu erstellen und dort je nach Typ weiterverarbeiten, wäre eine Alternative. Dann müsste ich diese Methode aber immer ändern, wenn ich neue Typen einfüge. Falls das andere aber geht , brauche ich den alten Code nicht anfassen und brauche nur eine neue Methode mit neuen Typ erstellen.
 
T

Tomate_Salat

Gast
Naja, entweder mit instanceof:

Java:
if(x instanceof String) ...

oder eben die Klassen vergleichen:
Java:
if(x.getClass().equals(String.class))

wobei man bei primitiven Typen aufpassen muss:
Java:
Class<?> cl=x.getClass();
if(cl.getClass().equals(Integer.class) || cl.getClass().equals(Integer.TYPE))
 

Xalker

Mitglied
Meine Idee war:

Java:
public class TestMain {
	public static void main(String[] args) {
		Integer i = 5;
		String s = "Text";
		Object o;

                o =i;
		InterfaceDatenObject do1 = ErstelleObject(o);
                o =s;
		InterfaceDatenObject do1 = ErstelleObject(o);
	}


	public InterfaceDatenobject ErstelleObject(Object o) {
		// wie ich das dynamisch mache per Reflection, bekomme ich nicht hin
		DatenObjectFabrik fabrik;  = new DatenObjectFabrik();
		return fabrik.erstelle( ???? )
	}
}

In der Fabrik sollen, aber für jeden Typ Methoden stehen. ErstelleObject() sollte nicht verändert werden bei Erweiterungen.

Falls das nicht geht, muss ich wohl eine Methode erstelle(Object o) machen und dort je nach Übergabeparameter, das erforderliche Objekt erstellen. Ist dann nicht schön gekapselt.
 
S

Spacerat

Gast
Das liesse sich nun noch durch die Verwendung von Generics verbessern, indem man beim Programmstart eine "Map<Class<?>, Class<? extends InterfaceDataObject>>" anlegt, in welcher man die jeweiligen Typen zu vorhandenen Interfaces mapped.
Java:
public InterfaceDataObject erstelle(Object o) {
  Class<? extends IntefaceDataObject> idoc = null;
  if(o == null) {
    idoc = interfaceMap.get(null);
  } else {
    idoc = interfaceMap.get(o.getClass());
  if(idoc != null) {
    // Try-Catch-Block aus purer Faulheit weggelassen ;)
    return idoc.newInstance();
  }
  return null;
}
:oops: Irgendwie benötigt man Generics ja nur, weil "Class<?>" bereits generisch ist. Naja...
Auf jeden benötigen die konkreten InterfaceDataObjects nun einen erreichbaren Standard-Konstruktor.
 
Zuletzt bearbeitet von einem Moderator:

Xalker

Mitglied
Das ist cool und klappt auch. Danke.

Kann man beim Aufruf von idoc.newInstance() auch einen Parameter vom Typ Object mitgeben. Habe mir im Moment mit einer zusätzlichen Methode setzen geholfen.

Java:
	public iDatenObject erstellen(Object o) throws InstantiationException,
			IllegalAccessException {
		Class<? extends iDatenObject> idoc = null;
		if (o == null) {
			idoc = interfaceMap.get(null);
		} else {
			idoc = interfaceMap.get(o.getClass());
			if (idoc != null) {
				iDatenObject iDO = idoc.newInstance();
				iDO.setzen(o);
				return iDO;
			}
		}
		return null;
	}
 
S

Spacerat

Gast
Per Class-Objekt kann man nur den Standard-Konstruktor einer Klasse aufrufen, für Parameterübergabe müsste man sich mit "getConstructor(Class[] parameter)" erst den passenden holen. Ich würde aber auch bei Gettern und Settern bleiben, weil die ja ohnehin nötig sein könnten um in den Objekten Daten zu setzen oder zu lesen. Die Instanzierung über einen entsprechenden Konstruktor wäre im Gegensatz dazu um einiges aufwendiger.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
P Parameterübergabe, von Methode zu Methode zu main Java Basics - Anfänger-Themen 4
J Parameterübergabe in switch? Java Basics - Anfänger-Themen 2
W Was bedeutet im Struktogramm „zufall“ aufrufen (keine Parameterübergabe)? Java Basics - Anfänger-Themen 8
M Methode Objekt als Parameterübergabe Java Basics - Anfänger-Themen 6
B Parameterübergabe in main Java Basics - Anfänger-Themen 1
E Erste Schritte Parameterübergabe - Prozentrechner Java Basics - Anfänger-Themen 5
S Methoden Parameterübergabe Java Basics - Anfänger-Themen 4
S Parameterübergabe zwischen zwei Programme Java Basics - Anfänger-Themen 4
Joew0815 Parameterübergabe Java Basics - Anfänger-Themen 3
Q Parameterübergabe - Objekt - Referenz Java Basics - Anfänger-Themen 5
K Parameterübergabe im Terminal(Linux) Java Basics - Anfänger-Themen 8
V Parameterübergabe von Methoden verstehen Java Basics - Anfänger-Themen 13
P Java-Konsolenanwendung mit Parameterübergabe (Windows) Java Basics - Anfänger-Themen 3
H Parameterübergabe Java Basics - Anfänger-Themen 4
X Parameterübergabe Java Basics - Anfänger-Themen 6
S Parameterübergabe - identische Funktionen, aber falsche Funktion Java Basics - Anfänger-Themen 5
K Input/Output switch case - Parameterübergabe args[0] Java Basics - Anfänger-Themen 34
E Einfache Frage zur Parameterübergabe in Methoden Java Basics - Anfänger-Themen 8
A Parameterübergabe zwischen statischen und nicht statischen Klassen Java Basics - Anfänger-Themen 6
L Parameterübergabe Java Basics - Anfänger-Themen 6
K Parameterübergabe Java Basics - Anfänger-Themen 3
W Parameterübergabe Java Basics - Anfänger-Themen 9
Y Probleme mit Parameterübergabe Java Basics - Anfänger-Themen 8
O Parameterübergabe mit RadioButtons Java Basics - Anfänger-Themen 2
V Return - JA/NEIN - Parameterübergabe Array (Referenz) Java Basics - Anfänger-Themen 7
G Parameterübergabe über mehrer Klassen Java Basics - Anfänger-Themen 2
S parameterübergabe Java Basics - Anfänger-Themen 5
M Parameterübergabe an *.jar Java Basics - Anfänger-Themen 5
M Parameterübergabe an externe JAR-Datei? Java Basics - Anfänger-Themen 2
B Frage zu Code (Parameterübergabe) Java Basics - Anfänger-Themen 14
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
B printf() mit Parameterübergabe? Java Basics - Anfänger-Themen 2
G Parameterübergabe als Referenz bzw. als Kopie Java Basics - Anfänger-Themen 4
G Java Applikation ein Programm mit Parameterübergabe starten Java Basics - Anfänger-Themen 3
V doPost parameterübergabe funktioniert nicht. Java Basics - Anfänger-Themen 5
G Problem bei Parameterübergabe Java Basics - Anfänger-Themen 2
T Runtime.getRuntime().exec mit parameterübergabe Java Basics - Anfänger-Themen 16
roflomfg Parameterübergabe in in "*.jar" files möglich? Java Basics - Anfänger-Themen 8
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
D probleme bei der Parameterübergabe Java Basics - Anfänger-Themen 12
M Parameterübergabe Java Basics - Anfänger-Themen 7
J Nested Layouts - Parameterübergabe bei ActionListener Java Basics - Anfänger-Themen 2
M Parameterübergabe! Java Basics - Anfänger-Themen 4
M Probleme bei Parameterübergabe in Rekursion Java Basics - Anfänger-Themen 5
K Parameterübergabe bei quickSort Java Basics - Anfänger-Themen 6
G Parameterübergabe bei Runtime.getRuntime().exec Java Basics - Anfänger-Themen 16
J parameterübergabe arraylist Java Basics - Anfänger-Themen 9
D args und parameterübergabe Java Basics - Anfänger-Themen 8
D Parameterübergabe mit JSP Java Basics - Anfänger-Themen 2
I Parameterübergabe beim Aufruf in der Kommandozeile Java Basics - Anfänger-Themen 4
B Parameterübergabe und return; Java Basics - Anfänger-Themen 3
F Performanceverlust bei ständiger Parameterübergabe? Java Basics - Anfänger-Themen 4
K Parameterübergabe Java Basics - Anfänger-Themen 5
R Parameterübergabe Java Basics - Anfänger-Themen 13
H Parameterübergabe zwischen einzelnen Funktionen Java Basics - Anfänger-Themen 4
I Reflection: Suche Feld + in Unterklassen Java Basics - Anfänger-Themen 7
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
G Vererbung Sicherheitslücke? Reflection sieht members, die nicht sichtbar sein sollten?! Java Basics - Anfänger-Themen 11
S reflection und felder Java Basics - Anfänger-Themen 12
B .class-File mit Reflection auslesen Java Basics - Anfänger-Themen 8
U Reflection Benutzung Java Basics - Anfänger-Themen 2
J Reflection Java Basics - Anfänger-Themen 6
B Reflection Java Basics - Anfänger-Themen 8
S Datentypen Reflection Cast anhand eines Strings? Java Basics - Anfänger-Themen 7
X reflection api Java Basics - Anfänger-Themen 5
R Alle Klassen ermitteln, die Interface implementieren / Reflection Java Basics - Anfänger-Themen 51
lumo java reflection Java Basics - Anfänger-Themen 7
J Reflection Java Basics - Anfänger-Themen 2
J Reflection Java Basics - Anfänger-Themen 3
P Reflection - Class Not Found Exception Java Basics - Anfänger-Themen 3
A Frage zu Reflection Java Basics - Anfänger-Themen 8
A abgeleitete Klassen mit Reflection holen Java Basics - Anfänger-Themen 2
M Reflection Java Basics - Anfänger-Themen 8
W Problem bezüglich reflection Java Basics - Anfänger-Themen 11
S verschiede constructoren über reflection Java Basics - Anfänger-Themen 3
V Reflection API - getter und setter Java Basics - Anfänger-Themen 7
JFeel-x Frage zu reflection Java Basics - Anfänger-Themen 12
J Reflection Basic Java Basics - Anfänger-Themen 26
C Reflection Exceptions behandeln Java Basics - Anfänger-Themen 6
T von Reflection zum Thread? Java Basics - Anfänger-Themen 5
G Vorteile Reflection bezüglich MVC-Pattern Java Basics - Anfänger-Themen 9
G Reflection - Klasse laden aus anderem Verzeichnis Java Basics - Anfänger-Themen 4
L Reflection-fehlermeldung Java Basics - Anfänger-Themen 12
E Klassenaufrufe dynamisch mit Reflection Java Basics - Anfänger-Themen 4
S wer oder was ist reflection? Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben