String als Code interpretieren

Maddili

Mitglied
Hi, ist es möglich einen String als Code zu interpretieren bzw. auszuführen?


folgendes Problem:

Code:
String options[] = {"A60", "A61", "A62", "A63", "A67", "A68"};

   for(int i=0; i<options.length; i++){
   System.out.println("cb_"+options[i]);

Das funktioniert natürlich. Aber jetzt möchte ich abfragen, ob verschiedene Checkboxes selektiert sind.
(z.B.: cb_A60, cb_A61...usw)

Code:
/**
*  -> Von meiner Überlegung sollte es SO funktionieren.
*     Was natürlich nicht möglich ist.
* 
*  if(Output.cb_ + options[i] +.isSelected()){
*  	writer.write(xml.getOptions(""+options[i]);
*  	writer.newLine();
*/


Als String könnte ich es ja so schreiben. Aber gibt es eine Möglichkeit, einen String als Code zu interpretieren

Ich hoffe ihr versteht mein Problem.... :-/

mfg Maddin
 
Nein, ich verstehe es erlich gesagt nicht. Warum schreibst du die Checkboxes nicht in ein Array? Dann kannst du die Felder der Boxes in ein 2D-Array schreiben und damit prüfen, ob alle selected sind.
 
Joa, hab ich mir auch gedacht.
Es ist so, dass das Programm schon vorhanden ist. Ich muss es nur "weiterführen"/modifizieren.

Bin auch nicht so der MasterChiefProgrammierer...

Wenn es im im Nachhinein nicht zu viel Aufwand ist, würde ich das auch machen (wenn mir einer sagt, WIE ;) )

Und nochmal, nen String als Code zu interpretieren geht dann nicht, oder? Dann kann ich den Gedanken getrost in den Müll werfen.

mfg Maddin
 
Das stimmt nicht.

Man kann zur Laufzeit beanshell ausführen oder Methoden by-name vom classloader holen und dann ausführen.

Leider wäre das eine smarte Lösung für eine reichlich verkorkste Architektur.

Arrays oder evtl. auch HashMaps sind da besser.

Grüße
gore
 
Für die Haarspalter:
So wie du es in deinem Codebeispiel versucht hast zu machen geht es nicht.
 
Ok - Die Ausführung WIE ich das geschrieben habe, was ja nur ein Beispiel. Mir gings hauptsächlich um das Eigentliche -String als Code interpretieren.

Denn in Zusammenhang mit SQL kann ich ja mein Statement auch als String übergeben ( String stmt = "SELECT * FROM MUELLHAUFEN")

Wie kann ich denn das mit den Checkbox Arrays machen?

Ich würde es gerne SO machen (Was ja nicht geht...)
Code:
String options[] = {"A60", "A61", "A62", "A63", "A67", "A68",
"G21", "G22", "G23", "G26", "G28", "G31", "G32", "G38", "G41", "G42",
"G43", "G46", "G91", "G93", "G47", "G48", "G49", // [....und so weiter
}


for(int i=0; i<options.length; i++ ){
       if(Output.cb_ +options[i]+ .isSelected()){
                  if(xml.getOptions(""+options[i]).equals(xml.getOptions("temp"+options[i]))){
	writer.write(xml.getOptions(""+options[i]));
 	writer.newLine();
	}else{
	  writer.write(xml.getOptions("temp"+options[i]));
	  writer.newLine();
}
}


Denn sonst muss ich ~ 70 mal folgenden Codeblock schreiben:

Code:
if(Output.cb_A60.isSelected()){
	if(xml.getOptions("A60").equals(xml.getOptions("tempA60"))){
	writer.write(xml.getOptions("A60"));
	writer.newLine();
}else{
	writer.write(xml.getOptions("tempA60"));
	writer.newLine();
	}
}


/**
* Wird verglichen, ob in einer XML etwas verändert wurde. Die Änderung von A60 wird in 'tempA60' gespeicher, 
* und bei der Erzeugung einer Datei tempA60, statt A60 verwendet.
* Aber das tut atm nichts zur Sache.
**/


Wäre für jeden Vorschlag dankbar - Auch was Architektur usw betrifft.

Danke,
Maddin
 
Ganz einfach

Du machst eine Hashmap<String,Boolean>.

Java:
    HashMap<String, Boolean> map = new     HashMap<String, Boolean> ();
    map.put("cb72",false);
    map.put("cb4711",true);

   for (String s : map.keySet() )
  {
    Boolean b = map.get(s);
 }
 
Code:
String stroptions[] = {"A60", "A61", "A62", "A63", "A67", "A68","G21", "G22", "G23", "G26", "G28", "G31", "G32", "G38", "G41", "G42","G43", "G46", "G91", "G93", "G47", "G48", "G49"};
JCheckBox[] options = new JCheckBox[stroptions.length];
for (int i = 0; i < options.length; i++) 
{
	options[i] = new JCheckBox();
	options[i].setText(stroptions[i]);
}
for(int i=0; i<options.length; i++ ){
	if(options[i].isSelected())
                     {
		if(xml.getOptions(""+stroptions[i]).equals(xml.getOptions("temp"+stroptions[i]))){
		writer.write(xml.getOptions(""+stroptions[i]));
		writer.newLine();
		}else{
		writer.write(xml.getOptions("temp"+stroptions[i]));
	                     writer.newLine();
	}
}

Also wenn du die Checkboxen als Array anlegst sollte das ganze eigentlich funktionieren ich weiß natürlich nicht was du unten machst aber so sollte es ja dann ungefähr aussehen. du Kannst aber dann auch options[i].getText() machen anstatt das String Array abzufragen funktioniert beides.

Gruß
Anton
 
Zurück