Dynamic Invocation
Appearance
From Wikibooks, open books for an open world
Navigate Reflection topic: ()
We start with basic transfer object:
Computer code
Code listing 10.1: DummyTo.java
packagecom.test; publicclass DummyTo{ privateStringname; privateStringaddress; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicStringgetAddress(){ returnaddress; } publicvoidsetAddress(Stringaddress){ this.address=address; } publicDummyTo(Stringname,Stringaddress){ this.name=name; this.address=address; } publicDummyTo(){ this.name=newString(); this.address=newString(); } publicStringtoString(StringappendBefore){ returnappendBefore+" "+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
packagecom.test; importjava.lang.reflect.Constructor; importjava.lang.reflect.InvocationTargetException; importjava.lang.reflect.Method; publicclass ReflectTest{ publicstaticvoidmain(String[]args){ try{ Class<?>dummyClass=Class.forName("com.test.DummyTo"); // parameter types for methods Class<?>[]partypes=newClass[]{String.class}; // Create method object. methodname and parameter types Methodmeth=dummyClass.getMethod("toString",partypes); // parameter types for constructor Class<?>[]constrpartypes=newClass[]{String.class,String.class}; //Create constructor object. parameter types Constructor<?>constr=dummyClass.getConstructor(constrpartypes); // create instance Objectdummyto=constr.newInstance(newObject[]{"Java Programmer","India"}); // Arguments to be passed into method Object[]arglist=newObject[]{"I am"}; // invoke method!! Stringoutput=(String)meth.invoke(dummyto,arglist); System.out.println(output); }catch(ClassNotFoundExceptione){ e.printStackTrace(); }catch(SecurityExceptione){ e.printStackTrace(); }catch(NoSuchMethodExceptione){ e.printStackTrace(); }catch(IllegalArgumentExceptione){ e.printStackTrace(); }catch(IllegalAccessExceptione){ e.printStackTrace(); }catch(InvocationTargetExceptione){ e.printStackTrace(); }catch(InstantiationExceptione){ 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.
To do:
Add some exercises like the ones in Variables