1

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

4

2 回答 2

2

您可以通过少量的反射来做到这一点:

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

这要求实现类具有可访问的无参数构造函数。

于 2013-02-05T02:49:12.393 回答
1

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

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

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

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

doStuffMethod.invoke(myClass.newInstance());
于 2013-02-05T02:42:26.887 回答