加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

没有目标对象的Java动态代理?

发布时间:2020-12-15 08:29:43 所属栏目:Java 来源:网络整理
导读:奇怪的问题…… 如何在没有实际拥有目标对象的情况下使用动态代理时,如何使用Java的调用拦截器? 例如,我想创建一个超级对象,它可以代表在运行时指定的十几个接口,而不一定需要一个实现其中任何接口的对象. 基本上这就像大多数动态语言的__call功能一样. 思
奇怪的问题……

如何在没有实际拥有目标对象的情况下使用动态代理时,如何使用Java的调用拦截器?

例如,我想创建一个超级对象,它可以代表在运行时指定的十几个接口,而不一定需要一个实现其中任何接口的对象.

基本上这就像大多数动态语言的__call功能一样.

思考?

解决方法

也许我误解了这个问题(如果是这样,请告诉我!)但是这会让你开始吗?

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;

public class Main
{
    public static void main(final String[] argv)
    {
        final Object             object;
        final InvocationHandler  handler;
        final Runnable           runnable;
        final Comparable<Object> comparable;


        handler = new InvocationHandler()
        {
            public Object invoke(final Object   proxy,final Method   method,final Object[] args)
                throws Throwable
            {
                System.out.println(proxy.getClass());
                System.out.println(method);
                System.out.println(Arrays.toString(args));
                return (0);
            }
        };

        object = Proxy.newProxyInstance(Main.class.getClassLoader(),new Class[] { 
                                            Runnable.class,Comparable.class,},handler);

        runnable = (Runnable)object;
        runnable.run();

        comparable = (Comparable<Object>)object;
        comparable.compareTo("Hello");
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读