public Object CloneObject( Object inObj ) {
    try{
        Object retObj = null;
        java.lang.reflect.Field[] srcFields = inObj.getClass().getDeclaredFields();
        String objNm = inObj.getClass().getName();
        Class retClass = Class.forName( objNm );
        retObj = retClass.newInstance();
        if ( inObj == null ) {
            retObj = null;
            return retObj;
        }
        java.lang.reflect.Field[] retFields = retObj.getClass().getDeclaredFields();
        for (int i= 0;i<srcFields.length;i++){
            for (int j= 0;j<srcFields.length;j++){
                if ( ( srcFields[ i ].getName() ).equals( retFields[ j ].getName() ) ) {
                    if ( srcFields[ i ].getType() == int.class ) {
                        retFields[ j ].setInt( retObj, srcFields[ i ].getInt( inObj ) );
                    } else if ( srcFields[ i ].getType() == long.class ) {
                        retFields[ j ].setLong( retObj, srcFields[ i ].getLong( inObj ) );
                    } else if ( srcFields[ i ].getType() == double.class ) {
                        retFields[ j ].setDouble( retObj, srcFields[ i ].getDouble( inObj ) );
                    } else if ( srcFields[ i ].getType() == char.class ) {
                        retFields[ j ].setChar( retObj, srcFields[ i ].getChar( inObj ) );
                    } else if ( srcFields[ i ].getType() == byte.class ) {
                        retFields[ j ].setByte( retObj, srcFields[ i ].getByte( inObj ) );
                    } else if ( srcFields[ i ].getType() == float.class ) {
                        retFields[ j ].setFloat( retObj, srcFields[ i ].getFloat( inObj ) );
                    } else if ( srcFields[ i ].getType() == boolean.class ) {
                        retFields[ j ].setBoolean( retObj, srcFields[ i ].getBoolean( inObj ) );
                    } else if ( srcFields[ i ].getType() == short.class ) {
                        retFields[ j ].setShort( retObj, srcFields[ i ].getShort( inObj ) );
                    }else {
                        retFields[ j ].set( retObj, srcFields[ i ].get( inObj ) );
                    }
                    break;
                } else {
                    continue;                
                }
            }    
        }
        return retObj;
    } catch ( Throwable ex ) {
        return null;
    }
}

解决方案 »

  1.   

    public Object CloneObject( Object inObj ) {
      try{
        Object retObj = null;
        java.lang.reflect.Field[] srcFields = inObj.getClass().getDeclaredFields();
        String objNm = inObj.getClass().getName();
        Class retClass = Class.forName( objNm );
        retObj = retClass.newInstance();
        if ( inObj == null ) {
          retObj = null;
          return retObj;
        }
        java.lang.reflect.Field[] retFields = retObj.getClass().getDeclaredFields();
        for (int i= 0;i<srcFields.length;i++){
          for (int j= 0;j<srcFields.length;j++){
            if ( ( srcFields[ i ].getName() ).equals( retFields[ j ].getName() ) ) {
              if ( srcFields[ i ].getType() == int.class ) {
                retFields[ j ].setInt( retObj, srcFields[ i ].getInt( inObj ) );
              } else if ( srcFields[ i ].getType() == long.class ) {
                retFields[ j ].setLong( retObj, srcFields[ i ].getLong( inObj ) );
              } else if ( srcFields[ i ].getType() == double.class ) {
                retFields[ j ].setDouble( retObj, srcFields[ i ].getDouble( inObj ) );
              } else if ( srcFields[ i ].getType() == char.class ) {
                retFields[ j ].setChar( retObj, srcFields[ i ].getChar( inObj ) );
              } else if ( srcFields[ i ].getType() == byte.class ) {
                retFields[ j ].setByte( retObj, srcFields[ i ].getByte( inObj ) );
              } else if ( srcFields[ i ].getType() == float.class ) {
                retFields[ j ].setFloat( retObj, srcFields[ i ].getFloat( inObj ) );
              } else if ( srcFields[ i ].getType() == boolean.class ) {
                retFields[ j ].setBoolean( retObj, srcFields[ i ].getBoolean( inObj ) );
              } else if ( srcFields[ i ].getType() == short.class ) {
                retFields[ j ].setShort( retObj, srcFields[ i ].getShort( inObj ) );
              }else {
                retFields[ j ].set( retObj, srcFields[ i ].get( inObj ) );
              }
              break;
            } else {
              continue;        
            }
          }  
        }
        return retObj;
      } catch ( Throwable ex ) {
        return null;
      }
    }
      

  2.   

    不就是利用 reflect 原理来 clone 一个对象吗!!!有什么好解释的。  方法名称本身就说明了一切。