reflection

  • Themenstarter Themenstarter sonntag
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

sonntag

Gast
Hi,

ich hätte eine Frage. Und zwar ist es möglich per Reflection eine Klasse vom selben Typ mit dem Attribut Name und einer variablen Anzahl an Attributen zu erzeugen?
Beispiel:
Also sagen wir mal ich definiere diesen Klassentypen als Klasse R. Alle Objekte der Klasse R verfügen über das Attribut Name und eine variable Anzahl an Attributen. Also das erste Objekt der Klasse R verfügt über die Attribute Name, Nachname,Stadt während ein anderes Objekt über die Attribute Name und Montag verfügt.
Ich habe folgenden Link gefunden java.sun.com/docs/books/tutorial/reflect/object/arg.html
aber der bringt mich nicht sonderlich weiter. Denn anscheinend muß der Konstruktor im Vorfeld für diese anzahl an Argumenten vorhanden sein, aber das ist eben nicht das was ich brauche.
Wichtig: Attibute über HashMaps oder ähnliches zu simulieren bringt mir nichts, da jch auf diese per Reflection zugreifen möchte.

Bin für jeden Tipp dankbar!

Gruß
 
Hi,

danke für den Tipp. Das Programm soll vom Nutzer konfiguriert werden können, ohne in den Quellcode eingreifen zu müssen. Daher scheidet Vererbung aus. Außerdem habe ich Vorgaben bekommen == UML an die ich mich halten muß.

Danke und schlaf gut

Gruß
 
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getConstructor(java.lang.Class[]) ?!
 
leider nicht. das funktioniert nur für schon vordefinierte konstruktoren. das ist wie in meinem link : das beispiel Rectangle besitzt mehrere Konstruktoren und für die kann man getConstructor() anwenden. Meine Frage bezieht sich -und ich vermutete sie ist negativ - darauf ob es möglich ist per Reflection mit beliebiegen Attributen eine Klasse zu erzeugen, ohne alle möglichen Konstruktoren zu definieren.

Danke
 
darf man denn fragen wie du die attribute speicherst? denn offensichtlich ja nicht als normale instanzvariablen sonst hättest du ja kein problem ???:L aber als Map willst du sie auch nich haben - weil du warum überhaupt nur mit reflection auf sie zugreifen willst :?:
 
Hi,

also ich muß nach einer UML programmieren, da ist man halt eingeschränkt. Ich würde des auch sonst anders machen.
Vereinfachen wir die Frage:
Ich möchte Objekte einer Basisklasse mit dem Attribut Name erzeugen. Diesen Attributen möchte ich mittels Reflection dynmaisch beliebig viele (1..n) Attribute zuordnen können. Ist es möglich?

Mit dem Beispiel aus meinem ersten Posting ist es möglich wenn es zu der Basisklasse alle möglichen Konstruktoren gibt, also mit 1-n Attributen. Aber das will ich nicht haben. Ich möchte den Konstruktor modifizieren können. Ist es möglich oder nein?

Gruß

danke
 
diesen objekten möchte ich beliebig viele attribute zuordnen können, sollte des heißen.
 
> diesen objekten möchte ich beliebig viele attribute zuordnen können
sind die attribute denn vorhanden = als variablen im code deklariert? wenn nein hilft eh alles nix :roll:

> Ich möchte den Konstruktor modifizieren können. Ist es möglich oder nein?
nein

warum verwendest du keine set-methoden oder änderst das feld direkt, oder benutzt einfach die java.beans api
versteh nur noch immer nich was das ganze werden soll ???:L
 
werde mir das mit den beans anschauen. danke


sind die attribute denn vorhanden = als variablen im code deklariert? wenn nein hilft eh alles nix
in nem configurationsfile bzw klasse, soll später halt mit xml laufen.

Code:
private ReaderStrategy ConfigureServiceCall() 
		{
			
	                 result.addFieldExtractor(4, 18, "CustomerName");
				result.addFieldExtractor(19, 23, "CustomerID");
				result.addFieldExtractor(24, 27, "CallTypeCode");
				result.addFieldExtractor(28, 35, "DateOfCallString");
	    	
	    	
	      return result;
	    }
	    
	    private ReaderStrategy ConfigureUsage()
	    {
	      
	    	ReaderStrategy result=null;
	    	
	    	  result = new ReaderStrategy("USGE");
	    	  result.addFieldExtractor(4, 8, "CustomerID");
	    	  result.addFieldExtractor(9, 22, "CustomerName");
	    	  result.addFieldExtractor(30, 30, "Cycle");
	    	  result.addFieldExtractor(31, 36, "ReadDate");
	      
	      return result;
	    }


Die Oberklasse ist halt ReaderStrategy. So die Objekte sollen verschiedene Felder haben, die Namen sind in den result.addFieldExtractor()-Methoden. Diese Daten stehen später in XML-Dateien. Und es geht leider nicht den Konstruktor immer neu zu definieren mit den Variablennamen und Typen.?! Schade. Die Werte sollen per Reflection später gesetzt werden. Ich schaue mir das mit den Beans an.
Danke
[/code]
 
du könntest alles auch in einer Matrix oder Liste speichern:

[BEZEICHNUNG] [WERT]
Name Müller
Automarke VW
Auftr.nummer 111-222-333
 
ja könnte ich, aber wollte das anders lösen. also entweder nehme ich ne collection oder ne skriptsprache, die es erlaubt neue attribute an klassen zuzuweisen.

Gruß

Danke
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben