Dynamisch durch alle Objektvariablen eines Objektes iteriere

Status
Nicht offen für weitere Antworten.

Cheefrocker

Bekanntes Mitglied
Hallo zusammen,

weiss einer wie ich dynamisch durch alle Objektvariablen vom Typ String iterieren kann wenn ich nicht weiss welche Variablen in diesem Objekt enthalten sind?


Code:
public class TestKlasse {

    //optionale Felder
    private String E1Hin1 = "";
    private String E1Hin2 = "";
    private String E1Hin3 = "";


   //methoden.........

}


Ich will wissen ob alle Variablen gesetzt sind und wenn eine nicht gesetzt ist, dann will ich wissen welche das ist.


Das ist hier nur ein Beispiel ich hab viel mehr Variablen. Will aber alle Pflichtfelder gesetzt haben bzw diese überprüfen. Will jetzt aber keine riesen geschachtelte Abfrage machen. Gibt es eine Möglichkeit dies umzusetzen. Macht diese Sinn?


Wie prüft ihr ob alle Variablen bzw Methoden gesetzt und ausgeführt wurden..


danke an euch!
 
daran siehst du, wie wenig Sinn es macht, soviele Variablen zu deklarieren,
mit Arrays/ Listen hast du weit weniger Probleme beim Durchlauf,


wenn du die gefragte Funktionalität nur zum Testen und nicht direkt im Programm brauchst,
dann ist es noch halbwegs vertretbar, dafür Reflection einzusetzen,
lies dich zu diesem Stichwort schlau, damit kann man alle Felder bekommen und den Typ sowie den Inhalt abfragen

------

im Programm selber besser mit normalen Code arbeiten,
etwas kürzer ist vielleicht
teste("var1",var1,"var2",var2,"var3",var3);
also alle benötigten Variablen einer Operation als Parameter zu übergeben und deren Namen dazu,

das kommt dann in einer Operation teste(String... strings) an (ohne Java 1.5 mit einem String-Array/ Liste arbeiten)
und kann dann per Schleife verarbeitet werden:
wenn String i null ist dann den zugehörigen Namen (steht direkt davor) in einer Fehlermeldung ausgeben
 
Du könntest dir eine Collection für den Typ Object erzeugen und da deine ganzen variablen reinpacken...
Dazu müssten Integer aber auch mit new Integer() erzeugt werden statt mit int... (soviel ich weiss)!
Dann kannst du einfach mit der for-each-schleife über deine Variablen in der Collection iterieren!
Was verstehst du in dem Zusammenhang mit dynamisch?
 
> Was verstehst du in dem Zusammenhang mit dynamisch?

man kann (sollte können) beliebige neue String-Variablen anlegen, ohne manuell den Test zu erweitern
 
danke dir @slater

Ich will ja eine Schnittstelle(Jar-File) für andere Entwickler erstellen die eine bestimmte Aktion durchführt. Damit die Aktion aber ausgeführt werdern kann müssen die PFlichtfelder gesetzt sein.

Mein Problem besteht zur Zeit darin, dass ich den Aufruf der Schnittstelle sperren muss wenn z.b in einer Anwendung bei einer bestimmten Konstellation ein Pflichtfeld nicht vorkommt.

Man kann sich das so vorstellen:Beim Starten der Gui-Anwendung wird die Schnittstelle instanziert. In einem Panel soll z.b beim Drücken eines Buttons die Schnittstelle aufgerufen werden. Die Daten werden doch jedoch nicht beim Drücken des Buttons vorgenommen sondern schon während des Programmlaufes. Der Button muss vor der Bedienung jedoch schon vorher deaktiviert werden wenn die Schnittstelle eh nicht augerufen werden kann.
Im Programmlauf kann der Entwickler die verschiedenen Methoden aufrufen.Ich muss jedoch auch sicherstellen das alle Methoden aufgerufen wurden.
 
Würde es an deiner Stelle mit String Arrays machen, diese dann zu durchlaufen ist dann ja fast schon ein kinderspiel ^^
 
lohr hat gesagt.:
Würde es an deiner Stelle mit String Arrays machen, diese dann zu durchlaufen ist dann ja fast schon ein kinderspiel ^^

Problem ist das ist dann alle so ansprechen müsste.
Code:
String[] liste = {};


liste [0]="1";

liste [1]="hinweis";


aber dann wüsste man nicht welche Variable z.b liste[12] ist.

Oder wie meinste das?
 
SlaterB hat gesagt.:
daran siehst du, wie wenig Sinn es macht, soviele Variablen zu deklarieren,
mit Arrays/ Listen hast du weit weniger Probleme beim Durchlauf,


wenn du die gefragte Funktionalität nur zum Testen und nicht direkt im Programm brauchst,
dann ist es noch halbwegs vertretbar, dafür Reflection einzusetzen,
lies dich zu diesem Stichwort schlau, damit kann man alle Felder bekommen und den Typ sowie den Inhalt abfragen

------

im Programm selber besser mit normalen Code arbeiten,
etwas kürzer ist vielleicht
teste("var1",var1,"var2",var2,"var3",var3);
also alle benötigten Variablen einer Operation als Parameter zu übergeben und deren Namen dazu,

das kommt dann in einer Operation teste(String... strings) an (ohne Java 1.5 mit einem String-Array/ Liste arbeiten)
und kann dann per Schleife verarbeitet werden:
wenn String i null ist dann den zugehörigen Namen (steht direkt davor) in einer Fehlermeldung ausgeben


Hab folgendes Probiert:

Code:
		public static void printFieldNames(Object o) {
			Class c = o.getClass();
			Field[] publicFields = c.getFields();
			for (int i = 0; i < publicFields.length; i++) {
				String fieldName = publicFields[i].getName();
				Class typeClass = publicFields[i].getType();
				String fieldType = typeClass.getName();
				System.out.println("Name: " + fieldName + ", Type: " + fieldType);
			}
		}

damit kann ich aber nur auf die Plubic-Variablen von der Schnittstelle zugreifen. Gibt es eine Möglichkeit auf die Private-Variablen zuzugreifen?
 
statt getFields ruf getDeclaredFields auf, dann bekommst du auch die private Members. Mit setAccessible(true) kannst du auch darauf zugreifen.
 
> aber dann wüsste man nicht welche Variable z.b liste[12] ist.

deswegen ja bei dieser Variante abwechselnd die Namen + die Variablen-Inhalte in das Array schreiben
 
Cheefrocker hat gesagt.:
lohr hat gesagt.:
Würde es an deiner Stelle mit String Arrays machen, diese dann zu durchlaufen ist dann ja fast schon ein kinderspiel ^^

Problem ist das ist dann alle so ansprechen müsste.
Code:
String[] liste = {};


liste [0]="1";

liste [1]="hinweis";


aber dann wüsste man nicht welche Variable z.b liste[12] ist.

Oder wie meinste das?
Hm das hört sich für mich so an als ob eine Map hier genau das richtige wäre.
Schau dir mal java.util.Map an.
 
ach ja, natürlich, Map empfehle ich nun auch,

gibts auch in Java 1.4 😉
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben