Objekt einer Klasse erzeugen, die als String vorliegt

Status
Nicht offen für weitere Antworten.

philth

Mitglied
Hallo,

ich habe eine Klasse "Modell" und davon abgeleitet bestimmte Modelle, z.B. "Widerstand" oder "PIDRegler". Aus einem anderen Programm bekomme ich jetzt z.B. einen String "DerString" und möchte ein Objekt erzeugen und zwar eines der Klasse "DerString" wenn sie denn existiert.

Ungefähr so:

Code:
Modell modellFabrik(String modellname){
  try{
    return new modellname(); // hier muss eben etwas anderes hin
  }
  catch{
    return new Modell(); // wenn das oben nicht geklappt hat da die Klasse nicht existiert
  }
}

Ich möchte keine verschachtelten if und elses, am liebsten ein Ansatz, bei dem bei Programmerstellung noch nicht klar sein muss, welche Klassen es geben kann.

Ist so etwas möglich?

Grüße
Philipp

EDIT: Hab herausgefunden, dass es wohl was mit der Reflection-API zu tun hat.
 
Zuletzt bearbeitet:
mach einen URLClassloader, hol dir dort jeweils per loadClass(String) eine Class, prüfe diese mit instanceof und ruf newInstance() auf.
 
Hallo faetzminator,

danke für den Hinweis, ich hab mir die Doku dazu mal angesehen. Ich habe einen Ansatz gefunden, der bisher ganz gut funktioniert, der geht so:

Code:
public class ClassToolbox {
	
	public static Object createObject(String className) {
	      Object object = null;
	      try {
	          Class classDefinition = Class.forName(className);
	          object = classDefinition.newInstance();
	      } catch (InstantiationException e) {
	          System.out.println(e);
	      } catch (IllegalAccessException e) {
	          System.out.println(e);
	      } catch (ClassNotFoundException e) {
	          System.out.println(e);
	      }
	      return object;
	   }

}

// Hier der Aufruf:

public class ClassLoaderTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DummyClass d = (DummyClass) ClassToolbox.createObject("bto.btconstruct.test.DummyClass");
		d.echo("hiho"); // DummyClass hat diese Methode

	}

}

Wenn sich hier Probleme ergeben, probier ich aber mal den ClassLoader aus, hört sich auch ganz gut an. Den obigen Code hab ich hier abgeschrieben: Reflection - Die Java Reflection API - Wiklet

Grüße
Philipp
 
Das funktioniert ohne eigenen CL solange gut, solange
- die Klassen, welche du laden willst, sich in dem dem Programm gegebenen Classpath befinden
- du diese nicht mit einer neuen Version überschreiben möchstest (Sourcecode anpassen, Class erzeugen, neu laden)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben