/*
Java Reflection in Action
Ira R. Forman and Nate Forman
ISBN 1932394184
Publisher: Manning Publications Co.
*/
import java.awt.Color;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class GetColor {
static public void main(String[] args) {
Rabbit rabbit = new Rabbit();
//start extract snippet3
setObjectColor(rabbit, Color.WHITE);
//stop extract snippet3
if (!rabbit.setColorCalled)
throw new RuntimeException();
}
//start extract setObjectColor
public static void setObjectColor(Object obj, Color color) {
Class cls = obj.getClass(); //#1
try {
Method method = cls.getMethod("setColor", //#2
new Class[] { Color.class });
method.invoke(obj, new Object[] { color }); //#3
} catch (NoSuchMethodException ex) { //#4
throw new IllegalArgumentException(cls.getName()
+ " does not support" + "method setColor(:Color)");
} catch (IllegalAccessException ex) { //#5
throw new IllegalArgumentException(
"Insufficient access permissions to call"
+ "setColor(:Color) in class " + cls.getName());
} catch (InvocationTargetException ex) { //#6
throw new RuntimeException(ex);
}
}
//stop extract setObjectColor
static public class Rabbit {
public boolean setColorCalled = false;
public void setColor(Color c) {
setColorCalled = true;
}
}
}