我正在开发一个项目,我必须在运行时从SD卡加载一个jar文件。我已经使用public class Dog
{
[Key]
public int DogID { get; set; }
public string DogName { get; set; }
public int? DogSireID { get; set; }
[ForeignKey("DogSireID")]
public virtual Dog DogSire { get; set; }
public int? DogDamID { get; set; }
[ForeignKey("DogDamID")]
public virtual Dog DogDam { get; set; }
[InverseProperty("DogSire")]
public virtual ICollection<Dog> DogsSires { get; set; }
[InverseProperty("DogDam")]
public virtual ICollection<Dog> DogsDams { get; set; }
}
类成功实现了这个功能,并且我能够调用任何有或没有的函数jar文件中类的参数。
现在我面临的挑战是我必须在jar文件中实现一个接口,用于我项目中的回调。到目前为止,我无法找到任何解决方案。
我用这种方式调用方法:
dexloader
其中classLoad是从jar文件动态加载的类的实例。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
使用Proxy.newProxyInstance()创建将实现给定接口的代理对象。对接口方法的调用由InvocationHandler处理。 例: 您的界面动态加载:
public interface SomeInterface {
void doSomething(Context context);
}
创建一个实现SomeInterface的对象
Class[] ia = new Class[1];
ia[0] = Class.forName("SomeInterface");
handler = new MyHandler();
Object obj = Proxy.newProxyInstance(context.getClassLoader(),ia,handler)
类MyHandler将处理对SomeInterface方法的调用:
class MyHandler implements InvocationHandler {
public Object invoke (Object proxy, Method method, Object[] args) {
if(method.getName().equals("doSomething")) {
Context context = (Context)args[0];
// do something here
}
return null;
}
}