This application updates the message and integer variables in the Mystery class
import java.lang.reflect.*; public class ReflectUpdate { public ReflectUpdate () { super (); } // end ReflectUpdate constructor public static void main ( String [ ] args ) { try { Class theClass = Class.forName("Mystery"); String s = theClass.getName(); System.out.println("Name of class: " + s); System.out.println(); System.out.println("Methods declared in class: " ); Method[] theMethods = theClass.getDeclaredMethods(); for (int i = 0; i < theMethods.length; i++) { String methodName = theMethods[i].getName(); System.out.println(i+" Method Name: " + methodName); String returnString = theMethods[i].getReturnType().getName(); System.out.println(" Return Type: " + returnString); Class[] parmTypes = theMethods[i].getParameterTypes(); System.out.print(" Parameter Types:"); for (int j = 0; j < parmTypes.length; j++) { String parmString = parmTypes[j].getName(); System.out.print(" " + parmString); } // end for: j System.out.println(); System.out.println(); } // end for: i Object theObject = theClass.newInstance(); Class thisClass = theObject.getClass(); Method thisMethod = thisClass.getMethod("getMessage",null); String result1 = (String) thisMethod.invoke( theObject, null); System.out.println("getMessage returns: " + result1 ); System.out.println(); Method thatMethod = thisClass.getMethod("getNumber",null); Integer result2 = (Integer) thatMethod.invoke( theObject, null); System.out.println("getNumber returns: " + result2 ); System.out.println(); Object [] argMessage = new Object [] {"Updated message from class, Mystery!"}; Class [] parmsMessage = new Class [] { String.class }; Method setMessageMethod = thisClass.getMethod ("setMessage", parmsMessage); setMessageMethod.invoke ( theObject, argMessage ); String result3 = (String) thisMethod.invoke( theObject, null); System.out.println("getMessage returns: " + result3 ); System.out.println(); Object [] argNumber = new Object [1]; argNumber [0] = new Integer ( 8 ); Class [] parmsNumber = new Class [] { Integer.class }; Method setNumberMethod = thisClass.getMethod ("setNumber", parmsNumber); setNumberMethod.invoke ( theObject, argNumber ); Integer result4 = (Integer) thatMethod.invoke( theObject, null); System.out.println("getNumber returns: " + result4 ); System.out.println(); } // end try catch ( ClassNotFoundException e ) { System.out.println ( "Class not found: " + e ); } catch (InstantiationException e) { System.out.println ( "Instantion error: " + e ); } catch (IllegalAccessException e) { System.out.println ( "Illegal access: " + e ); } catch (NoSuchMethodException e) { System.out.println( "No such method: " + e); } catch (InvocationTargetException e) { System.out.println( "Target exception: " + e); } } // end main } // end ReflectUpdate