|
| GAMES++ |
|
|
|
 |
|
| BROWSER UTILITIES |
|
|
|
 |
|
| AFFILIATES |
|
|
|
 |
|
| ADVERTISEMENT |
|
|
|
 |
|
Call A Method Dynamically (Reflection)
Java: How To
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);
}
}
|
|
|