/*
This program is a part of the companion code for Core Java 8th ed.
(http://horstmann.com/corejava)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
import java.lang.reflect.Method;
/**
* This program shows how to invoke methods through reflection.
*
* @version 1.1 2004-02-21
* @author Cay Horstmann
*/
public class MethodPointerTest {
public static void main(String[] args) throws Exception {
// get method pointers to the square and sqrt methods
Method square = MethodPointerTest.class.getMethod("square", double.class);
Method sqrt = Math.class.getMethod("sqrt", double.class);
// print tables of x- and y-values
printTable(1, 10, 10, square);
printTable(1, 10, 10, sqrt);
}
/**
* Returns the square of a number
*
* @param x
* a number
* @return x squared
*/
public static double square(double x) {
return x * x;
}
/**
* Prints a table with x- and y-values for a method
*
* @param from
* the lower bound for the x-values
* @param to
* the upper bound for the x-values
* @param n
* the number of rows in the table
* @param f
* a method with a double parameter and double return value
*/
public static void printTable(double from, double to, int n, Method f) {
// print out the method as table header
System.out.println(f);
double dx = (to - from) / (n - 1);
for (double x = from; x <= to; x += dx) {
try {
double y = (Double) f.invoke(null, x);
System.out.printf("%10.4f | %10.4f%n", x, y);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}