Android - 使用Java接口,在编译时未知的实现

时间:2013-02-05 02:26:31

标签: java android dynamic interface

我有一个带有Java接口的Android应用程序,它有一个方法,比如void doStuff(String className)。其他人将为我提供.jar文件,每个文件包含一个实现此接口的类,以包含在我的APK中。调用doStuff()时,我将接收实现该接口的类的名称作为参数。我希望能够获得该类的实例并在运行时调用doStuff(),而不需要在我自己的代码中定义任何特定的实现类类型。实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

你可以用温和的反射来做到这一点:

Class<? Extends MyInterface> myClass = (Class<? Extends MyInterface>)Class.forName(className);
MyInterface myObject = myClass.newInstance();
myObject.doStuff();

这要求实现类具有可访问的no-args构造函数。

答案 1 :(得分:1)

您可以通过反射实现此目的,这是一个可以根据需要进行更改的说明性示例。

此代码假设doStuff不接受任何参数,并且该类具有定义的默认构造函数。

Class<?> myClass = Class.forName(className);

Method doStuffMethod = myClass.getMethod("doStuff");

doStuffMethod.invoke(myClass.newInstance());