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