Question:
I have two classes in two separate files. I don’t want to use an interfacebecause the types of objects I’ll instantiate dynamically can be quitedifferent each time. What can I do to call method without the useof an interfase?
Answer:
Java 1.1 introduced a facility called reflection, through which themethods of a class can be discovered and invoked without compile-timeknowledge of the class. You need to familiarize yourself with theclasses in java.lang.reflect. Here is a rather contrived example showinghow to call System.out.println() without invoking it directly. Youwill generally use reflection when you dynamically load a class of anunknown type, but with one or more known methods.
import java.lang.reflect.*;public final class Reflect { public static final void main(String[] args) { Class outputClass, stringClass[]; Object[] arguments; Method printlnMethod; outputClass = System.out.getClass(); stringClass = new Class[1]; stringClass[0] = String.class; try { printlnMethod = outputClass.getDeclaredMethod("println", stringClass); } catch(NoSuchMethodException e) { System.err.println("println does not exist."); e.printStackTrace(); return; } arguments = new Object[1]; arguments[0] = "Hello world!"; try { printlnMethod.invoke(System.out, arguments); } catch(InvocationTargetException e) { System.err.println("invocation failed."); e.printStackTrace(); } catch(IllegalAccessException e) { System.err.println("invocation failed."); e.printStackTrace(); } }}