动态调用实现方法



我有一个接口,这个接口有几个实现。现在我需要动态地调用正确的Implemented方法。

我从属性文件中获得实现类的名称。现在我必须使用反射来调用该方法。

你能建议做这件事的最好方法吗?

//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)使用反射。我有TestInterface的类名。

这就是我所做的。我使用Class.forName(className).newInstance();

创建了一个TestInterface实例
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);

我不知道这样做是否正确?你能给我指路吗?

通过反射创建对象是可以的(排除错误处理,我认为这里为了简洁省略了错误处理)。

但是一旦创建了对象,为什么不简单地将其向下转换为ITestInterface并直接调用它的方法呢?

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

(同样,这里省略了对ClassCastException的处理,但应该在生产代码中处理)

相关内容

  • 没有找到相关文章

最新更新