The instance method which also returns a String value:
package com.logicbig.example.method;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class InvokeExample2 {
private String process(String str) {
System.out.println("processing " + str);
return "processing result";
}
public static void main(String... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Method m = InvokeExample2.class.getDeclaredMethod("process", String.class);
Object returnedValue = m.invoke(new InvokeExample2(), "test");
System.out.println(returnedValue);
}
}
Output
processing test
processing result
Dynamic method dispatch is applied in case of instance method:
package com.logicbig.example.method;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class InvokeExample3 {
private static class SuperTask {
protected void process() {
System.out.println("super class process");
}
}
private static class SpecializedTask extends SuperTask{
protected void process() {
System.out.println("sub class process");
}
}
public static void main(String... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Method m = SuperTask.class.getDeclaredMethod("process");
m.invoke(new SpecializedTask());
}
}
Output
sub class process