Mega Code Archive

 
Categories / Java / Reflection
 

This program shows how to invoke methods through reflection

/*  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 <http://www.gnu.org/licenses/>.  */ 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();       }     }   } }