当前位置: 代码迷 >> J2EE >> java根据指定方法的参数去构造一个新的对象的拷贝
  详细解决方案

java根据指定方法的参数去构造一个新的对象的拷贝

热度:856   发布时间:2013-11-12 22:53:55.0
**    
     * 根据指定方法的参数去构造一个新的对象的拷贝并将他返回 
     * @param obj 原始对象 
     * @return 新对象 
     * @throws NoSuchMethodException     
     * @throws InvocationTargetException     
     * @throws IllegalAccessException     
     * @throws InstantiationException     
     * @throws SecurityException     
     * @throws IllegalArgumentException  
     * @author www.daimami.com  
     */ 
    @SuppressWarnings("unchecked") 
    public static Object copy(Object obj) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, 
                    InvocationTargetException, NoSuchMethodException 
    { 
        //获得对象的类型     
        Class classType = obj.getClass(); 
  
        //通过默认构造方法去创建一个新的对象,getConstructor的视其参数决定调用哪个构造方法     
        Object objectCopy = classType.getConstructor(new Class[]{}).newInstance(new Object[]{}); 
  
        //获得对象的所有属性     
        Field[] fields = classType.getDeclaredFields(); 
  
        for(int i = 0; i < fields.length; i++) 
        { 
            //获取数组中对应的属性     
            Field field = fields[i]; 
  
            String fieldName = field.getName(); 
            String stringLetter = fieldName.substring(0, 1).toUpperCase(); 
  
            //获得相应属性的getXXX和setXXX方法名称     
            String getName = "get" + stringLetter + fieldName.substring(1); 
            String setName = "set" + stringLetter + fieldName.substring(1); 
  
            //获取相应的方法     
            Method getMethod = classType.getMethod(getName, new Class[]{}); 
            Method setMethod = classType.getMethod(setName, new Class[]{field.getType()}); 
  
            //调用源对象的getXXX()方法     
            Object value = getMethod.invoke(obj, new Object[]{}); 
  
            //调用拷贝对象的setXXX()方法     
            setMethod.invoke(objectCopy, new Object[]{value}); 
        } 
  
        return objectCopy; 
    }

  相关解决方案