Class aus String-Value instanzieren?

Marine-of-Hell

Grünschnabel
Hallo Zusammen!

Gibt es eine Möglichkeit eine Klasse aus einen String-Value zu instanzieren? Ich hab mal ein wenig mit Class.forName rumexperimentiert - aber irgendwie komme ich da nicht zum gewünschten Ergebnis. Hier mal mein Code:

Code:
		String strClass = "my.sandbox.basic.Sandbox";
		Class<?> objClass = Class.forName(strClass, true, Object.class.getClassLoader());
		String strSample = objClass.toString();
		System.out.println(strSample);

Hier die Klasse Sandbox:
Code:
package my.sandbox.basic;

public class Sandbox {
	
	public Sandbox()
	{
		System.out.println("Hallo Welt");
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Hallo Thomas";
	}
	
}

Momentan erhalte ich leider immer eine ClassNotFound-Exception. Idee der ganzen Sache ist es mir diverse Klassen zu erstellen die vom selben Interface abgeleitet werden - also die gleichen Basic's haben. Diese möchte ich dann individuell per Datenbank-Feld im Java-Code ausführen. Also es steht zum Beispiel zu einem Datensatz die Klasse xy.class ausführen und zum anderen die Klasse ab.class ausführen. Dann soll er diese entsprechend für die weitere Verarbeitung nutzen. Ich weiß das sowas in PHP geht (*duck*) - aber ist sowas auch in einer richtigen Programmiersprache wie Java möglich? Und wie würde das Ganze heißen - also gibt es dafür ein Fachwort?

Danke für eure Antworten. :)

Gruß,
Thomas
 
Wenn sich deine Klasse im Classpath befindet, sollte das so gehen.

Um eine Instanz von deiner Klassen zu erhalten, musst du auf dem Class-Objekt aber noch newInstance aufrufen. Was nur geht, wenn die Klasse einen Standardkonstruktor enthält, also keine Parameter erwartet. Ansonsten wirds ein wenig komplizierter.
 
Es scheint mit dem Classloader der von Object.class zurückgegeben wird nicht zu funktionieren.

So läufts:
Code:
	String strClass = "my.sandbox.basic.Sandbox";
        Class<?> objClass = Class.forName(strClass, true, Main.class.getClassLoader());
        //Class<?> objClass = Class.forName(strClass); <- oder so

        //String strSample = objClass.toString();
        //System.out.println(strSample);

        Object sb = objClass.newInstance();
        System.out.println(sb);

Oder eben ohne explizite Angabe eines Classloaders.
 

Neue Beiträge

Zurück