Java ArrayList 和 HaspMap 链式添加的实现

jopen 11年前

一、背景   

   在application中ArrayList  和 HaspMap 这两个类是经常用到的。而且,一般需要处理的数据量也不会少,因为这两个类是没有实现链式添加元素的,因此我们需要不断重复的编写这两个类声明的变量添加元素,这种方式不但累赘,而且看起来非常之不优美:比如

      List list = new ArrayList();

      list.add("a");

      list.add("b");

      ...

      如果能够链式添加的话,我们就可以简洁且优美地添加元素了:如

      List list = new ArrayList();

      list.add("a").add(b).add("c");

二、 实现方式

    编写需要实现的类的代理类。代理类继承需要实现的类,对添加元素的方法进行封装,然后返回代理类。

三、ArrayList 和 HaspMap 代理类的实现 

  1、ArrayList 代理类:

package proxy;    import java.util.ArrayList;  import java.util.Collection;    /**   * ArrayList  的代理类 主要是实现链式添加元素   * example: ArrayListProxy arrayListProxy = new ArrayListProxy();   * arrayListProxy.addObject(a).addObject(b).addObject(c);   */  public class ArrayListProxy<E> extends ArrayList<E>{       //重写ArrayList的所有构造函数---start      public ArrayListProxy(Collection<? extends E> c) {          super(c);      }          public ArrayListProxy(int initialCapacity) {          super(initialCapacity);      }          public ArrayListProxy() {          super();      }     //重写ArrayList的所有构造函数---end        /**       * 对 ArrayList 的 add() 的方法进行封转返回  ArrayListProxy 来实现 链式添加       * @param e       * @return       */      public ArrayListProxy addObject(E e){          if(this.add(e)){              return this;          }        throw new ArrayStoreException("ArrayListProxy add element fail!");      }    }


  1、HashMap 代理类:

package proxy;      import java.util.HashMap;  import java.util.Map;      /**   *HashMap 的代理类 实现链式添加元素   * example:  HashMapProxy hashMapProxy   = new HashMapProxy();   *            hashMapProxy.putObject("a","b").putObject("c","d");   * @param <K>   * @param <V>   */  public class HashMapProxy<K,V> extends HashMap<K,V> {       //重写HashMap的所有构造函数---start      public HashMapProxy(int initialCapacity) {          super(initialCapacity);      }          public HashMapProxy() {          super();      }        public HashMapProxy(Map<? extends K, ? extends V> m) {          super(m);      }          public HashMapProxy(int initialCapacity, float loadFactor) {            super(initialCapacity,loadFactor);      }     //重写HashMap的所有构造函数---end        /**       * 对 HashMap 的 put() 的方法进行封转返回  HashMapProxy 来实现 链式添加       * @param key       * @param value       * @return       */      public HashMapProxy putObject(K key,V value){          this.put(key, value);          return this;      }    } 

四、例子

 

 ArrayListProxy proxy = new ArrayListProxy();    proxy.addObject("a").addObject("e").addObject("c");       HashMapProxy hashMapProxy = new HashMapProxy();     hashMapProxy.putObject("a","b").putObject("c","d").putObject("e","r");