Вызов метода реализации динамически - PullRequest
0 голосов
/ 25 июля 2011

У меня есть интерфейс, и есть несколько реализаций для этого интерфейса. Теперь мне нужно динамически вызывать правильный реализованный метод.

Я получаю имя класса реализации из файла свойств. Теперь я должен вызвать метод с помощью отражения.

Не могли бы вы предложить лучший подход для этого?

//This is my Interface.

public interface ITestInterface{
    public CustomVO customMethod(CustomObj1 obj1,CustomObjec2 obj2);
}

//This class implements the above interface

public class TestInterface implements ITestInterface{
   public CustomVO customMethod(CustomObj1 obj1,CustomObjec2 obj2){

   //some logic
  }
}

Теперь мне нужно вызвать customMethod (obj1, obj2) с помощью Reflection. У меня есть имя класса TestInterface.

Это то, что я сделал. Я создал экземпляр TestInterface, используя Class.forName (className) .newInstance ();

Class[] paramTypes = new Class[ 2 ];
paramTypes [ 0 ] = CustomObj1.class;
paramTypes [ 1 ] = CustomObj2.class;
Object obj=Class.forName(className).newInstance();

Class.forName(className).getMethod( "customMethod", paramTypes ).invoke( obj, obj1,obj2);

Я не знаю, правильно ли это делать? Не могли бы вы вести меня?

1 Ответ

3 голосов
/ 25 июля 2011

Создание объекта с помощью отражения прекрасно, как вы это делали (исключая обработку ошибок, которую я предполагаю, что вы здесь опущены для краткости).

Но как только вы создали объект, почему бы просто не уменьшить его до1003 * и вызывать его метод (ы) напрямую?

ITestInterface obj = (ITestInterface) Class.forName(className).newInstance();
obj.customMethod(param1, param2);

(опять же, обработка ClassCastException здесь опущена, но это должно рассматриваться в производственном коде.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...