Home | Gaming | Programming | Play Online | Contact | Keyword Query
Games++ Games & Game Programming

GAMES++
Games++ Home
Games++ Gaming
Games++ Programming
Beta Testing Games
Free Online Games
Hints & Cheats

BROWSER UTILITIES
E-mail This Page
Add to Favorites

SITE SEARCH

Web Games++

AFFILIATES
Cheat Codes
Trickster Wiki
Game Ratings
Gameboy Cheats
PlayStation Cheats
BlackBerry Games
Photoshop Tutorials
Illustrator Tutorials
ImageReady Tutorials

ADVERTISEMENT

ADVERTISEMENT

How To Call A Method Dynamically (Reflection)

Java How To: Source Code

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);
   }
}

Copyright © 1998-2007, Games++ All rights reserved. | Privacy Policy