我在反射java接口时收到一个异常
我想在我的一个SDK中反映一个接口并调用它,但我收到了一个异常。下面是我的代码。请帮我解决这个问题我在反射java接口时收到一个异常,java,reflect,Java,Reflect,我想在我的一个SDK中反映一个接口并调用它,但我收到了一个异常。下面是我的代码。请帮我解决这个问题 public class ReflectMain { Class<?> obs = null; InterProxy.ProxyCallback callback = new InterProxy.ProxyCallback() { @Override public void onInvoke() { Log.d("totolog", "invokeSu
public class ReflectMain {
Class<?> obs = null;
InterProxy.ProxyCallback callback = new InterProxy.ProxyCallback() {
@Override
public void onInvoke() {
Log.d("totolog", "invokeSuccess");
}
};
public void reflectinterMain() {
try {
Class<?> reflectClass = Class.forName(ReflectClass.class.getName());
obs = Class.forName(ReflectClass.ReflectInter.class.getName());
Method method = reflectClass.getDeclaredMethod("addInter", obs);
Object listener = Proxy.newProxyInstance(obs.getClassLoader(), new Class[]{obs}, new InterProxy(callback));
method.setAccessible(true);
method.invoke("addInter", new Object[]{listener});
obs.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
class InterProxy implements InvocationHandler {
public ProxyCallback callback = null;
interface ProxyCallback {
void onInvoke();
}
InterProxy(ProxyCallback callback) {
if (this.callback != null) {
this.callback = callback;
}
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Log.d("totolog", method.getName());
if ("onRefletc".equals(method.getName())) {
callback.onInvoke();
}
return proxy;
}
然后我收到了这样一个例外。请帮助我分析此异常的原因以及如何解决它
Caused by: java.lang.IllegalArgumentException: Expected receiver of type lab.mon.actlab.java.reflectInter.ReflectClass, but got java.lang.String
at java.lang.reflect.Method.invoke(Native Method)
at lab.mon.actlab.java.reflectInter.ReflectMain.reflectinterMain(ReflectMain.java:29)
at lab.mon.actlab.java.reflect.ReflectActivity.onResume(ReflectActivity.java:87)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1354)
at android.app.Activity.performResume(Activity.java:7079)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3620)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3685)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2898)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
如何修复它,我想知道为什么?对
方法的调用。调用是不正确的,因为它需要一个对象的实例作为第一个参数,您要在该对象上调用该方法。您正在传递方法的名称。哪一行导致了错误?显示完整堆栈跟踪,我已经添加了完整堆栈,看起来像method.invoke(“addInter”,新对象[]{listener})
表示调用AddIner方法并传递参数AddIner
。该方法需要一个reflectiner
参数。这对我不起作用InterProxy.ProxyCallback callback=new InterProxy.ProxyCallback(){@Override public void onInvoke(){Log.d(“tototolog”,“invokesucces”);}代码>改为添加了InterProxy InterProxy=new InterProxy(new ProxyCallback(){@Override public void onInvoke(){Log.d(“tototolog”,“invokesucces”);})代码>我解决了,谢谢大家
Caused by: java.lang.IllegalArgumentException: Expected receiver of type lab.mon.actlab.java.reflectInter.ReflectClass, but got java.lang.String
at java.lang.reflect.Method.invoke(Native Method)
at lab.mon.actlab.java.reflectInter.ReflectMain.reflectinterMain(ReflectMain.java:29)
at lab.mon.actlab.java.reflect.ReflectActivity.onResume(ReflectActivity.java:87)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1354)
at android.app.Activity.performResume(Activity.java:7079)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3620)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3685)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2898)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)