在接触到java动态代理的时候,开始不太明白InvocationHandler里invoke方法返回值代表什么,后来写了个Demo验证一下就明白了。
新建一个接口
public interface Person {
String say(String word);
}
实现类
public class Student implements Person {
@Override
public String say(String word) {
Log.d("msg",word);
return "这是返回值";
}
}
InvocationHandler实现类
public class MyInvocation implements InvocationHandler {
private Object object;
public MyInvocation(Object object){
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Log.d("msg","invoke begin");
// Log.d("msg",proxy.getClass().getName()+"--->"+object.getClass().getName());
//return "自定义返回值";
return method.invoke(object,args);
}
}
调用
Student s = new Student();
Person proxy = (Person) Proxy.newProxyInstance(getClassLoader(),new Class[]{Person.class},new MyInvocation(s));
String b = proxy.say("i a student");
Log.d("msg","b==" + b);
从控制台可以看到打印出"b==这是返回值"
如果在invoke方法返回值改成 return "自定义返回值",则b==自定义返回值
由此可以得出invoke方法中返回的object应该对应代理类中方法的返回值。