private ArrayList getDataMaps(List list)
{ ArrayList retList = new ArrayList();
if (list != null)
{
int len = list.size();
for (int i = 0; i < len; i++)
{
DataMap map = new CountryInfoMap((CountryForm) list.get(i));
retList.add(map);
}
}
return retList;
}CountryInfoMap实现了DataMap接口,CountryForm继承自Struts的ActionForm,可否将DataMap,ActionForm 变为参数来将此方法封装。调用时只需要传入DataMap和ActionForm的子类以达到目的。

解决方案 »

  1.   

    //package ;public class ClassName {
        
        public List getDataMaps(List formList) {
            
            if(formList!=null && !formList.isEmpty()) {
                List dataMaps = new ArrayList(formList.size());
                
                for(int i=0, len=dataMaps.size(); i<len; i++) {
                    DataMap dm = convertToDataMap(dataMaps.get(i));
                    
                    if(dm!=null){
                        dataMaps.add(dm);
                    }else{
                        //throw new Exception("a error message");
                    }
                    
                }
                
                return dataMaps;
            }
            
            return new ArrayList(0);
        }
        
        // 由子类实现此方法
        protected abstract DataMap convertToDataMap(Object formObject);
        
    }
      

  2.   

    纠正:
    public abstract ClassName {
        ....;
    }
      

  3.   

    纠正:
    public abstract class ClassName {
        ....;
    }
      

  4.   

    另一种实现:
    //package ;public class ClassName {
        
        public List getDataMaps(List formList) {
            
            if(formList!=null && !formList.isEmpty()) {
                List dataMaps = new ArrayList(formList.size());
                
                for(int i=0, len=dataMaps.size(); i<len; i++) {
                    CountryForm cf = (CountryForm) dataMaps.get(i);
                    
                    DataMap dm = new CountryDataMap();//尽量减少CountryDataMap和CountryForm类的耦合
                    
                    setValueToDataMap(dm, cf);//设置值域
                    
                    dataMaps.add(dm);
                    
                }
                
                return dataMaps;
            }
            
            return new ArrayList(0);
        }
        
        protected void setValueToDataMap(DataMap dm, CountryForm cf) {
            ...;
        }
        
    }
      

  5.   

    上面的setValueToDataMap(DataMap dm, CountryForm cf)方法可以用apache的组件BeanUtils.copyProperties(Object targetObject, Object sourceObject)方法代替