Java动态代理的返回值

在接触到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应该对应代理类中方法的返回值。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值