Welcome to my blog, hope you enjoy reading
RSS

Tuesday 26 February 2013

How To Use Reflection To Call Java Method At Runtime


How To Use Reflection To Call Java Method At Runtime


Reflection is a very useful approach to deal with the Java class at runtime, it can be use to load the Java class, call its methods or analysis the class at runtime.
In this example, you will load a class called “AppTest” and call each of its methods at runtime.

1.AppTest.java
 
package com.javanotes2all.java.reflection;

public class AppTest 
{
 private int counter; 
 public void printIt(){
  System.out.println("printIt() no param");
 }
 
 public void printItString(String temp){
  System.out.println("printIt() with param String : " + temp);
 }
 
 public void printItInt(int temp){
  System.out.println("printIt() with param int : " + temp);
 }
 
 public void setCounter(int counter){
  this.counter = counter;
  System.out.println("setCounter() set counter to : " + counter);
 }
 
 public void printCounter(){
  System.out.println("printCounter() : " + this.counter);
 }
}

2.ReflectApp.java

This class will load the “AppTest” class and call its methods at runtime. The codes and comments are self-explanatory


package com.javanotes2all.java.reflection;

import java.lang.reflect.Method;

public class ReflectApp 
{
 public static void main(String[] args) 
 {
  //no paramater
  Class noparams[] = {};

  //String parameter
  Class[] paramString = new Class[1]; 
  paramString[0] = String.class;

  //int parameter
  Class[] paramInt = new Class[1]; 
  paramInt[0] = Integer.TYPE;

  try{
  //load the AppTest at runtime
  Class cls = Class.forName("com.javanotes2all.java.reflection.AppTest");
  Object obj = cls.newInstance();

  //call the printIt method
  Method method = cls.getDeclaredMethod("printIt", noparams);
  method.invoke(obj, null);

  //call the printItString method, pass a String param 
  method = cls.getDeclaredMethod("printItString", paramString);
  method.invoke(obj, new String("mkyong"));

  //call the printItInt method, pass a int param
  method = cls.getDeclaredMethod("printItInt", paramInt);
  method.invoke(obj, 123);

  //call the setCounter method, pass a int param
  method = cls.getDeclaredMethod("setCounter", paramInt);
  method.invoke(obj, 999);

  //call the printCounter method
  method = cls.getDeclaredMethod("printCounter", noparams);
  method.invoke(obj, null);

  }catch(Exception ex){
   ex.printStackTrace();
  }
 }
}

0 comments: