我在Android中使用Reflection创建一个newInstance调用时遇到问题。Android,界面,新实例
我的接口:
public interface IGiver {
public int getNr();
}
我的班级叫反思:
public class NrGiver implements IGiver {
int i = 10;
@Override
public int getNr() {
return i;
}
}
我打电话getNr方式:
String packageName = "de.package";
String className = "de.package.NrGiver";
String apkName = getPackageManager().getApplicationInfo(packageName, 0).sourceDir;
PathClassLoader myClassLoader =
new dalvik.system.PathClassLoader(
apkName,
ClassLoader.getSystemClassLoader());
Class c = Class.forName(className);
IGiver giver = (IGiver) c.newInstance();
最后一行不会工作就引起错误和我的应用程序停止。 我知道它是newInstance的错,但我想在IGiver对象上工作。
请帮帮我。
我的解决方案:
嘿家伙们最后我得到了鸡。
我找到了其他方法。这次我也使用了newInstance,但这次它的工作。 我的解决方案:
Class c = Class.forName(className);
Method methode = c.getDeclaredMethod("getNr");
Object i = methode.invoke(c.newInstance(), new Object[]{});
而这就是我想要做的。 我的手机上有一个NrGiver.class文件。它实现了Interface IGiver。所以它可以动态加载到我的应用程序中。我需要NrGiver类的Integer。所以我可以使我的代码通用。我试图将对象投射到我的界面,但失败了。
所以我找到了另一种方法来调用一个类的方法。
在线2的forName THX的帮助
接口不能有任何实例,这就是为什么它不会工作 – Egor
出现错误?什么错误,确切地说?使用logcat。 – Jems
@Egor我认为它不是一个接口。它是一个类NrGiver。 IGiver是一个界面。 – Neon