Call a method dynamically (Reflection)Tag(s): Language
import java.lang.reflect.*; import java.io.*; public class TestReflect { public static void main(String s[]) throws Exception{ String aClass; String aMethod; // we assume that called methods have no argument Class params[] = {}; Object paramsObj[] = {}; while (true) { aClass = lineInput("\nClass : "); aMethod = lineInput("Method: "); // get the Class Class thisClass = Class.forName(aClass); // get an instance Object iClass = thisClass.newInstance(); // get the method Method thisMethod = thisClass.getDeclaredMethod(aMethod, params); // call the method System.out.println (thisMethod.invoke(iClass, paramsObj).toString()); } /* Output examples: Class : Class1 Method: class1Method2 ### Class 1, Method2 ### Class : java.util.Date Method: toString Sat Aug 11 13:18:39 EDT 2007 Class : java.util.Date Method: getTime 1186852732140 */ } public static String lineInput (String prompt) throws IOException { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); System.out.print(prompt); return input.readLine(); } } class Class1 { public String class1Method1() { return "*** Class 1, Method1 ***"; } public String class1Method2() { return "### Class 1, Method2 ###"; } }
import java.lang.reflect.*; public class TestReflect { public static void main(String[] args) throws Exception { TestReflect.invoke("Class1", "say", new Class[] {String.class, String.class}, new Object[] {new String("Hello"), new String("World")}); /* output : Hello World */ } public static void invoke (String aClass, String aMethod, Class[] params, Object[] args) throws Exception { Class c = Class.forName(aClass); Method m = c.getDeclaredMethod(aMethod, params); Object i = c.newInstance(); Object r = m.invoke(i, args); } } class Class1 { public void say( String s1, String s2) { System.out.println(s1 + " " + s2); } }
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com