Вызова метода динамически с помощью Refle

В следующем примере показано, как обращаться к методам динамически с помощью отражения.


import java.lang.reflect.*;

import java.io.*;



public class testReflect {

   public static void main(String s[]) {

      testReflect t = new testReflect();

      try {

         t.doit();

         }

      catch (Exception e) {

         e.printStackTrace();

         }

      }

   public void doit() throws Exception {

      String aClass;

      String aMethod;   

      // we assume that called methods have no argument

      Class params[] {};

      Object paramsObj[] {};

      

      while (true) {

         /* examples 

            Class: class1         Method: class1Method2

            Class: java.util.Date Method: toString

            Class: java.util.Date Method: getTime

         */

         aClass  = Input.Line("\nClass : ");

         aMethod = Input.Line("Method: ");

         // get the Class

         Class thisClass = Class.forName(aClass);

         // get an instance 

         Object iClass = thisClass.newInstance();

         // get the method

         Method thisMethod = thisClass.getDeclaredMethod(aMethod, params);

         // call the method

         System.out.println(thisMethod.invoke(iClass, paramsObj).toString());

         }

      }

   

   static class Input {

     public static String Line(String sthrows IOException {

         BufferedReader input = 

             new BufferedReader(new InputStreamReader(System.in));

         System.out.print(s);

         return input.readLine();     

        }

     }

}



class class1 {

   public String class1method1() {

      return "*** Class 1, Method1 ***";

      }

   public String class1method2() {

      return "### Class 1, Method2 ###";

      }

}

Следующий пример вызывает метод класса с 2 аргументами:


import java.lang.reflect.*;



public class TestReflect {

  static void invoke(String aClass, String aMethod, Class[] params, Object[] args) {

    try {

      Class c = Class.forName(aClass);

      Method m = c.getDeclaredMethod(aMethod, params);      

      Object i = c.newInstance();

      Object r = m.invoke(i, args);

      

    catch (Exception e) {

      e.printStackTrace();

      

    }



  public static void main(String[] args) {

    invoke("Class1""say"new Class[] {String.class, String.class}

           new Object[] 

             {new String("Hello")new String("World")});

    }

}



class Class1 {

  public void sayString s1, String s2) {

    System.out.println(s1 + " " + s2);

    }

}   

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>