Klasse aus String

MScalli

Erfahrenes Mitglied
Hi leutz.
Leider passt die Frage irgendwie in kein unterforum deswegen stell ich sie mal hier.

Ich muss ne Klasse(war mal ein Cobol Programm das mikttels nem Prog umgewandelt wurde) folgenderweise aufrufen

Code:
public class AJAVA {

   public static void main(String[] args) {       
      
      E1100_05 mysub = new E1100_05();
      mysub.call(new Object[] {});
   }
}

jetzt muss aber der Klassenname aus ner Textdatei gelesen werden, also habe ich den namen nur als String.
Wie kann ich es anstellen das ich sagen kann

Code:
str_klassenname mysub = new str_klassenname()

habs mittels Reflection nicht hin bekommen. Weiss jemand rat
Schon mal thx an alle helfer.

gruss
MScalli
 
Hallo,

das funktioniert leider nur mit Reflection.
Code:
Class.forName("Klassenname").newInstance()

MFG

Sascha
 
da es ne Methode ist habe ich es schon mit paar sachen versucht..
z.B. so
Code:
import java.lang.reflect.Method;

public class AJAVA {

	public static void main(String[] args) {        
		
		//E1100_05 mysub = new E1100_05(); 
		//mysub.call(new Object[] {});
		
		callMethod("E1100_05", "call"); // aber wie bekomme ich das new Object[] rein
		                                // wenn das überhaupt geht so !
	}
	
	public static void callMethod(String klasse, String methode){
	    @SuppressWarnings("unused")
		String[] argv = { "-option", "Parameter" }; 
	    
	    @SuppressWarnings("unused")
		Method method = null;
	    Class<?> clazz = null;
		try {
			clazz = Class.forName(klasse );
			Object o = clazz.newInstance();
			clazz.getMethod( methode ).invoke( o );
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

PS: man das war mal ne schnelle antwort *freu*
 
wenn ich hier diese Zeile raus nehme

Code:
clazz.getMethod( methode ).invoke( o );

wird die Klasse aufgerufen.. aber leider muss ich ja an die Methode
Code:
call(new Object[] {})

rankommen!
 
In solchen Fällen ist die API dein Freund. Da hättest du nämlich gesehen wie es funktioniert.

Java:
public class ReflectionExample
{

  public static void main(String[] args)
  {

    callMethod(Foo.class.getName(), "bar",new Class[]{String.class}, "Hello World"); 
  }

  public static void callMethod(String klasse, String methode,Class[] parameterClazzes,  Object... args)
  {

    Class<?> clazz = null;
    try
    {
      clazz = Class.forName(klasse);
      Object o = clazz.newInstance();
      clazz.getMethod(methode, parameterClazzes).invoke(o, args);
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
  
  public static class Foo{
    
    
    public void bar(String s){
      System.out.println(s);
    }
    
  }
}

MFG

Sascha
 
o mann.. ich glaub ich check das nicht.
da es ein Object array übergibt müsste es doch ungefähr so aussehen!!?

Code:
import java.lang.reflect.Method;

public class AJAVA {

	public static void main(String[] args) {        
		
		//E1100_05 mysub = new E1100_05(); 
		//mysub.call(new Object[] {});
		
		callMethod("E1100_05", "call", new Class[]{Object[].class}, "");	                               
	}
	
	  public static void callMethod(String klasse, String methode, Class[] parameterClazzes, Object... args){
	    
	    @SuppressWarnings("unused")
		Method method = null;
	    Class<?> clazz = null;
		try {
			clazz = Class.forName(klasse );
			Object o = clazz.newInstance();
		
			clazz.getMethod(methode, parameterClazzes).invoke(o, args);
		
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

Oder? und wieso geht das mit dem Object... args !? wieso "..."
o mann ich probier da echt rum ohne ende aber heut geht mir einfach kein licht auf :confused:
 
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.lang.reflect.Method;

/**
 * @author Thomas.Darimont
 * 
 */
public class ReflectionExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("de.tutorials.Bubu");
        Method method = clazz.getDeclaredMethod("call", Object[].class);
        System.out.println(method.invoke(clazz.newInstance(), new Object[]{new Object[0]}));
    }
}

Java:
package de.tutorials;

public class Bubu {
    public Object call(Object[] args) {
        return args.length;
    }
}

Gruß Tom
 
wow.. treffer!!
hätte ich alleine nicht hin bekommen.. nie!!

vielen vielen dank sascha und thomas... :)
 
Zurück