Android 反射,动态代理

来源:互联网 发布:矩阵的幂次方 编辑:程序博客网 时间:2024/05/21 09:33

Android 反射,接口代理
简单的写一下,方便记忆

public class PayUtils implements InvocationHandler{    private void pay() {        Class<?> aClass = null;        Class<?> iClass = null;        try {            //反射类地址            aClass = Class.forName("*********");            //接口地址            iClass = Class.forName("*****.Listener");        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        if (aClass != null && iClass != null) {            try {                //方法                Method method = aClass.getMethod("get", Context.class);                //获取实例                Object payObject = method.invoke(aClass, activity);                Class<?> payClass = payObject.getClass();                //获取需要方法                Method payMethod = payClass.getMethod("方法名", Activity.class, String.class, String.class, Bundle.class, iClass);                Bundle extra = new Bundle();                extra.putBoolean(PaymentManager.PAYMENT_KEY_IS_NO_ACCOUNT, true);                //代理 类加载器,接口class,回掉                 Object o = Proxy.newProxyInstance(PayUtils.class.getClassLoader(), new Class[]{iClass}, this);                payMethod.invoke(payObject, activity, null, "传递值", extra, o);            } catch (NoSuchMethodException e) {                e.printStackTrace();            } catch (IllegalAccessException e) {                e.printStackTrace();            } catch (InvocationTargetException e) {                e.printStackTrace();            } catch (Exception e) {                e.printStackTrace();            }        }    }    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        //回掉返回        String name = method.getName();        if (name.equals("onSuccess")) {        } else if (name.equals("onFailed")) {        }        return null;    }}
原创粉丝点击