/** * */ package de.fhswf.in.inf.upnfx.util; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * Uses Reflection API to get the method for calculation. * * @author $Author: $ * @version $Revision: $, $Date: $ UTC */ public class UnaryTemplate extends UnaryOperator { private Method operator; /** * Gets the operator function from the Math class. * * @param mathFunction * The name of the operation. */ public UnaryTemplate(String mathFunction) { if (mathFunction == null) { throw new IllegalArgumentException("Operation can't be null."); } if (mathFunction.isEmpty()) { throw new IllegalArgumentException("Operations can't be empty."); } try { operator = Math.class.getMethod(mathFunction, Double.TYPE); } catch (NoSuchMethodException e) { throw new IllegalArgumentException("Not a valid Operator.", e); } catch (SecurityException e) { throw new IllegalArgumentException("Security violation.", e); } } /* * (non-Javadoc) * * @see de.fhswf.in.inf.java1.aufgabe12.UnaryOperator#eval(double) */ @Override final double eval(double d) { Object tmp = null; try { tmp = operator.invoke(null, d); } catch (IllegalAccessException e) { throw new IllegalStateException("Can't access method.", e); } catch (IllegalArgumentException e) { throw new IllegalStateException( "Argument for Math function is not double.", e); } catch (InvocationTargetException e) { if (e.getCause() instanceof IllegalArgumentException) { throw new IllegalArgumentException("Illegal Argument.", e); } throw new IllegalStateException("Unexpected exception.", e); } return (double) tmp; } }