GetColor.java Source code

Java tutorial

Introduction

Here is the source code for GetColor.java

Source

/*
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;
        }
    }
}