|
Calling a method dynamically using reflection |
|
|
The following examples shows how to call methods dynamically using reflection.
import java.lang.reflect.*;
import java.io.*;
public class testReflect {
public static void main(String s[]) {
testReflect t = new testReflect();
try {
t.doit();
}
catch (Exception e) {
e.printStackTrace();
}
}
public void doit() throws Exception {
String aClass;
String aMethod;
// we assume that called methods have no argument
Class params[] = {};
Object paramsObj[] = {};
while (true) {
/* examples
Class: class1 Method: class1Method2
Class: java.util.Date Method: toString
Class: java.util.Date Method: getTime
*/
aClass = Input.Line("\nClass : ");
aMethod = Input.Line("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());
}
}
static class Input {
public static String Line(String s) throws IOException {
BufferedReader input =
new BufferedReader(new InputStreamReader(System.in));
System.out.print(s);
return input.readLine();
}
}
}
class class1 {
public String class1method1() {
return "*** Class 1, Method1 ***";
}
public String class1method2() {
return "### Class 1, Method2 ###";
}
}
|
The next example calls a class method with 2 arguments:
import java.lang.reflect.*;
public class TestReflect {
static void invoke(String aClass, String aMethod, Class[] params, Object[] args) {
try {
Class c = Class.forName(aClass);
Method m = c.getDeclaredMethod(aMethod, params);
Object i = c.newInstance();
Object r = m.invoke(i, args);
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
invoke("Class1", "say", new Class[] {String.class, String.class},
new Object[]
{new String("Hello"), new String("World")});
}
}
class Class1 {
public void say( String s1, String s2) {
System.out.println(s1 + " " + s2);
}
}
|
Related Tips
|
Page 1 of 0 ( 0 comments )
You can share your information about this topic using the form below!
Please do not post your questions with this form! Thanks.