码迷,mamicode.com
首页 > 其他好文 > 详细

Proxy 示例

时间:2016-06-07 22:12:18      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

 1 package cn.proxy03;
 2 
 3 import java.lang.reflect.InvocationHandler;
 4 import java.lang.reflect.Method;
 5 import java.lang.reflect.Proxy;
 6 import java.util.ArrayList;
 7 import java.util.List;
 8 /**
 9  * 用代理修改list的add方法  判断添加字符串的首字母是否为J开始
10  * @author ASUS
11  *
12  */
13 public class ListProxy {
14 
15     public static void main(String[] args) {
16         //声明被代理的对象
17         final List<String> list = new ArrayList<>();
18         Object object = Proxy.newProxyInstance(ListProxy.class.getClassLoader(),
19                 new Class[]{List.class},
20                 new InvocationHandler() {
21                     
22                     @Override
23                     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
24                         // 限制:如果调用的是add方法,如果添加的是J则接收
25                         if(method.getName().equals("add")){
26                             if(args[0].toString().startsWith("J")){
27                                 list.add(args[0].toString());
28                                 return true;
29                             }else{
30                                 System.err.println("不接受");
31                                 return false;
32                             }
33                         }else{
34                             return method.invoke(list, args);
35                         }
36                     }
37                 });
38         List<String> listAdd = (List<String>) object;
39         new ListProxy().add(listAdd);
40     }
41     
42     public void add(List<String> list){
43         list.add("Jack");
44         list.add("Mary");
45         System.err.println("J开头的字符串个数为:"+list.size());
46     }
47 }

运行结果

技术分享

Proxy 示例

标签:

原文地址:http://www.cnblogs.com/fujilong/p/5568284.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!