`
Jason(aijun)
  • 浏览: 86700 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个通用的ProxyMap

    博客分类:
  • J2EE
阅读更多
先来一个通用的ProxyMap。如果不需要重用,这个类可以不用写。主要为了展示Proxy,delegate。

Java代码
public class ProxyMap {  
    protected Map map;  
 
    public ProxyMap(Map map) {  
        super();  
        this.map = map;  
    }  
 
    public Map getMap() {  
        return map;  
    }  
 
    public void clear() {  
        map.clear();  
    }  
 
    public boolean containsKey(Object key) {  
        return map.containsKey(key);  
    }  
 
    public boolean containsValue(Object value) {  
        return map.containsValue(value);  
    }  
 
    public Set entrySet() {  
        return map.entrySet();  
    }  
 
    public boolean equals(Object o) {  
        return map.equals(o);  
    }  
 
    public Object get(Object key) {  
        return map.get(key);  
    }  
 
    public int hashCode() {  
        return map.hashCode();  
    }  
 
    public boolean isEmpty() {  
        return map.isEmpty();  
    }  
 
    public Set keySet() {  
        return map.keySet();  
    }  
 
    public Object put(Object arg0, Object arg1) {  
        return map.put(arg0, arg1);  
    }  
 
    public void putAll(Map arg0) {  
        map.putAll(arg0);  
    }  
 
    public Object remove(Object key) {  
        return map.remove(key);  
    }  
 
    public int size() {  
        return map.size();  
    }  
 
    public Collection values() {  
        return map.values();  
    }  


public class ProxyMap {
protected Map map;

public ProxyMap(Map map) {
super();
this.map = map;
}

public Map getMap() {
return map;
}

public void clear() {
map.clear();
}

public boolean containsKey(Object key) {
return map.containsKey(key);
}

public boolean containsValue(Object value) {
return map.containsValue(value);
}

public Set entrySet() {
return map.entrySet();
}

public boolean equals(Object o) {
return map.equals(o);
}

public Object get(Object key) {
return map.get(key);
}

public int hashCode() {
return map.hashCode();
}

public boolean isEmpty() {
return map.isEmpty();
}

public Set keySet() {
return map.keySet();
}

public Object put(Object arg0, Object arg1) {
return map.put(arg0, arg1);
}

public void putAll(Map arg0) {
map.putAll(arg0);
}

public Object remove(Object key) {
return map.remove(key);
}

public int size() {
return map.size();
}

public Collection values() {
return map.values();
}
}



--------------------------------

IndexMap 继承 ProxyMap。
如果没有ProxyMap这个类,那么就不用继承。
需要自己实现所有Map的delegate方法。

IndexMap的代码几乎和 fins 给出的一样(就是copy过来的)。
只是可以截获所有的Map。而不只是HashMap。

Java代码
import java.util.ArrayList;  
import java.util.List;  
import java.util.Map;  
 
public class IndexMap extends ProxyMap{  
 
    public IndexMap(Map map) {  
        super(map);  
    }  
      
     private List list = new ArrayList();  
 
     public Object put(Object key, Object value) {  
     if (!containsKey(key)){  
     list.add(key);  
     }  
     return super.put(key, value);  
     }  
 
     public Object get(int idx){  
     return super.get(getKey(idx));  
     }  
     public int getIndex(Object key){  
     return list.indexOf(key);  
     }  
     public Object getKey(int idx){  
     if (idx>=list.size()) return null;  
     return list.get(idx);  
     }  
     public void remove(int idx){  
     Object key=getKey(idx);  
     removeFromList(getIndex(key));  
     super.remove(key);  
     }  
     public Object remove(Object key) {  
     removeFromList(getIndex(key));  
     return super.remove(key);  
     }  
     public void clear() {  
     this.list = new ArrayList();  
     super.clear();  
     }  
     private void removeFromList(int idx){  
     if (idx<list.size() && idx>=0) {  
     list.remove(idx);  
     }  
     }  

分享到:
评论

相关推荐

    一个通用的PHP广告(推广投放)竞价页订单管理系统.zip

    一个通用的PHP广告(推广投放)竞价页订单管理系统 一个通用的PHP广告(推广投放)竞价页订单管理系统 一个通用的PHP广告(推广投放)竞价页订单管理系统 一个通用的PHP广告(推广投放)竞价页订单管理系统 一个...

    基于SpringBoot搭建的一个通用的OA管理系统,以车辆管理为例.zip

    基于SpringBoot搭建的一个通用的OA管理系统,以车辆管理为例 基于SpringBoot搭建的一个通用的OA管理系统,以车辆管理为例 基于SpringBoot搭建的一个通用的OA管理系统,以车辆管理为例 基于SpringBoot搭建的一个通用...

    Nvme通用驱动 64 Nvme通用驱动 64

    Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme...

    基于SpringBoot搭建的一个通用的OA管理系统源码.zip

    基于SpringBoot搭建的一个通用的OA管理系统源码.zip基于SpringBoot搭建的一个通用的OA管理系统源码.zip基于SpringBoot搭建的一个通用的OA管理系统源码.zip基于SpringBoot搭建的一个通用的OA管理系统源码.zip基于...

    设计一个通用寄存器组,16位的寄存器。(含报告)

    设计一个通用寄存器组,满足以下要求: ①通用寄存器组中有4个16位的寄存器。 ②当复位信号reset=0时,将通用寄存器组中的4个寄存器清零。 ③通用寄存器组中有1个写入端口,当DRWr=1时,在时钟clk的上升沿将数据总线...

    java 基于泛型与反射的通用 DAO

    本文将深入探讨如何结合这两种技术实现一个通用的DAO(Data Access Object)设计模式。 首先,我们来看“泛型”。泛型是Java 5引入的新特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和...

    易语言通用脱壳机 易语言通用脱壳机 易语言通用脱壳机

    然后我就写了一个基于此的通用脱壳机. 目前支持易语言的两种编译方式 独立编译 和非独立编译.自动识别并修复数据. 特别是独立编译支持相对来说有那么一点用处.因为如果你要Patch人家的程序.你当然希望Patch完以后...

    基于Python实现的一个通用的二进制数据分析工具源码+文档说明(下载即用).zip

    基于Python实现的一个通用的二进制数据分析工具源码+文档说明(下载即用).zip分析任意格式的二进制数据,还能同时查看协议文档。 基于Python实现的一个通用的二进制数据分析工具源码+文档说明(下载即用).zip分析...

    易语言直接使用通用型

    "子程序1"可能是指一个示例子程序,用于演示如何在易语言中使用通用型。 5. **强制转换**:在处理通用型数据时,由于通用型可以存储任意类型,因此需要进行强制转换来确保数据的安全性和准确性。易语言提供了相应的...

    一个通用的Java线程池类

    环境:Windows XP ...这里本人翻写一个通用的线程池类,它可以用来作为工具类处理许多多线程问题。代码注释非常详尽,一行注释一行代码。 阅读对象:非常熟悉Java的基本概念,并且熟悉命令行编写代码的人员。

    基于SpringBoot+FreeMarker+MyBatis+ExtJs的一个通用后台管理系统源码(适合快速迭代开发).zip

    1、基于SpringBoot+FreeMarker+MyBatis+ExtJs实现的一个通用后台管理系统源码(适合快速迭代开发).zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计...

    一个通用的登录界面源代码加CSS样式.txt

    一个通用的登录界面源代码加CSS样式,界面简洁易改,适合各种网页网站的登录和注册页面,小白的话强烈推荐。

    Nvme通用驱动 32 Nvme通用驱动 32

    Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme...

    基于SpringBoot+FreeMarker+MyBatis+ExtJs实现的一个通用后台管理系统,界面美观,适合快速迭代开发

    基于SpringBoot+FreeMarker+MyBatis+ExtJs实现的一个通用后台管理系统,界面美观,适合快速迭代开发 项目说明 技术栈: SpringBoot MyBatis Redis MySQL FreeMarker ExtJs 基于SpringBoot+FreeMarker+MyBatis+...

    angularjs的一个通用模板

    angularjs的一个通用模板,稍微修改一下即可用作你的课程设计什么的

    全局组,通用组,和域本地组的区别

    通用组比全局组的范围更广,它们可以跨越多个域,属于同一个目录林中的任何域。这意味着通用组可以包含不同域中的用户和联系人,提供跨域的权限分配。然而,虽然通用组可以跨域,但它们并不自动传播成员身份信息到...

    封装一个通用Dialog,使用DialogFragment

    本教程将详细介绍如何封装一个通用的Dialog,使用DialogFragment。 1. **DialogFragment简介** DialogFragment是Fragment的子类,它具有Fragment的所有特性,如生命周期管理、回退栈支持等。同时,它还能展示一个...

    AxureUX WEB端交互原型通用组件模板库 v3

    AxureUX WEB端交互原型通用组件模板库 v3 (组件列表) AxureUX WEB端交互原型通用组件模板库 v3 (组件列表) AxureUX WEB端交互原型通用组件模板库 v3 (组件列表) AxureUX WEB端交互原型通用组件模板库 v3 (组件列表) ...

    浅谈MyBatis通用Mapper实现原理

    MyBatis通用Mapper是MyBatis框架中的一种通用Mapper实现方式,主要提供了一些通用的方法,这些方法是以接口的形式提供的。通用Mapper的实现原理主要是通过Java反射机制和MyBatis框架的特点来实现的。 首先,通用...

Global site tag (gtag.js) - Google Analytics