CommonsCollections学习笔记(四)
来源:优易学  2011-1-3 12:27:55   【优易学:中国教育考试门户网】   资料下载   IT书店

  BeanMap这个Map类用于把一个javaBean转换为Map,在其中存储了javaBean的各个属性的setXXX方法和getXXX方法,属性的类型。
  public class BeanMap extends AbstractMap implements Cloneable
  {
  private transient Object bean;//javaBean对象
  private transient HashMap readMethods = new HashMap();//getXXX方法集
  private transient HashMap writeMethods = new HashMap();//setXXX方法集
  private transient HashMap types = new HashMap();//成员变量类型集
  public static final Object[] NULL_ARGUMENTS = {};//空参数集,用于通过reflection调用getXXX方法
  public static HashMap defaultTransformers = new HashMap();//把基本类型映射为transformer类型,后者用于将字符串转换为合适的基本型的包装类
  //默认transformer
  static
  {
  defaultTransformers.put( Boolean.TYPE, new Transformer()
  {
  public Object transform( Object input )
  {
  return Boolean.valueOf( input.toString() );
  }
  }
  );
  defaultTransformers.put( Character.TYPE, new Transformer()
  {
  public Object transform( Object input )
  {
  return new Character( input.toString().charAt( 0 ) );
  }
  }
  );
  defaultTransformers.put( Byte.TYPE, new Transformer()
  {
  public Object transform( Object input )
  {
  return Byte.valueOf( input.toString() );
  }
  }
  );
  defaultTransformers.put( Short.TYPE, new Transformer()
  {
  public Object transform( Object input )
  {
  return Short.valueOf( input.toString() );
  }
  }
  );
  defaultTransformers.put(
  Integer.TYPE,
  new Transformer() {
  public Object transform( Object input ) {
  return Integer.valueOf( input.toString() );
  }
  }
  );
  defaultTransformers.put( Long.TYPE, new Transformer()
  {
  public Object transform( Object input ) {
  return Long.valueOf( input.toString() );
  }
  }
  );
  defaultTransformers.put( Float.TYPE, new Transformer()
  {
  public Object transform( Object input ) {
  return Float.valueOf( input.toString() );
  }
  }
  );
  defaultTransformers.put( Double.TYPE, new Transformer()
  {
  public Object transform( Object input ) {
  return Double.valueOf( input.toString() );
  }
  }
  );
  }
  public BeanMap(Object bean) {
  this.bean = bean;
  initialise();
  }
  public Object clone() throws CloneNotSupportedException {
  BeanMap newMap = (BeanMap)super.clone();
  if(bean == null) {//若底层bean不存在,则返回一个复制的空BeanMap,
  return newMap;
  }
  Object newBean = null;
  Class beanClass = null;
  try {
  beanClass = bean.getClass();//底层bean的Class
  newBean = beanClass.newInstance();//实例化一个新的bean
  } catch (Exception e) {
  // unable to instantiate
  throw new CloneNotSupportedException
  ("Unable to instantiate the underlying bean "" +
  beanClass.getName() + "": " + e);
  }
  try {
  newMap.setBean(newBean);
  } catch (Exception exception) {
  throw new CloneNotSupportedException
  ("Unable to set bean in the cloned bean map: " +
  exception);
  }
  try {
  //复制所有可读写的属性
  Iterator readableKeys = readMethods.keySet().iterator();
  while(readableKeys.hasNext()) {
  Object key = readableKeys.next();//属性名称
  if(getWriteMethod(key) != null) {
  newMap.put(key, get(key));//放入到新BeanMap中
  }
  }
  } catch (Exception exception) {
  throw new CloneNotSupportedException
  ("Unable to copy bean values to cloned bean map: " +
  exception);
  }
  return newMap;
  }
  public void clear() {
  if(bean == null) return;
  Class beanClass = null;
  try {
  beanClass = bean.getClass();
  bean = beanClass.newInstance();//重新实例化,一切都回到默认状态
  }
  catch (Exception e) {
  throw new UnsupportedOperationException( "Could not create new instance of class: " + beanClass );
  }
  }

[1] [2] [3] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训