50% developed

Dynamic Invocation

From Wikibooks, open books for an open world
Jump to navigation Jump to search

Navigate Reflection topic: v  d  e )

We start with basic transfer object:

Computer code Code listing 10.1: DummyTo.java
package com.test;
 
public class DummyTo {
    private String name;
    private String address;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
    public DummyTo(String name, String address) {
        this.name = name;
        this.address = address;
    }
 
    public DummyTo() {
        this.name = new String();
        this.address = new String();
    }
 
    public String toString(String appendBefore) {
        return appendBefore + " " + name + ", " + address;
    }
}

Following is the example for invoking method from the above mentioned to dynamically. Code is self explanatory.

Computer code Code listing 10.2: ReflectTest.java
package com.test;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
 
public class ReflectTest {
    public static void main(String[] args) {
        try {
            Class<?> dummyClass = Class.forName("com.test.DummyTo");
 
            // parameter types for methods
            Class<?>[] partypes = new Class[]{String.class};
 
            // Create method object. methodname and parameter types
            Method meth = dummyClass.getMethod("toString", partypes);
 
            // parameter types for constructor
            Class<?>[] constrpartypes = new Class[]{String.class, String.class};
 
            //Create constructor object. parameter types
            Constructor<?> constr = dummyClass.getConstructor(constrpartypes);
 
            // create instance
            Object dummyto = constr.newInstance(new Object[]{"Java Programmer", "India"});
 
            // Arguments to be passed into method
            Object[] arglist = new Object[]{"I am"};
 
            // invoke method!!
            String output = (String) meth.invoke(dummyto, arglist);
            System.out.println(output);
 
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }
}
Standard input or output Console for Code listing 10.2
I am Java Programmer, India

Conclusion: Above examples demonstrate the invocation of method dynamically using reflection.

Clipboard

To do:
Add some exercises like the ones in Variables