2016-07-19 13 views
2

當我使用「inFusion Hydrogen」分析我的項目後,很容易找出myQuestionFun()導致功能嫉妒。如何解決基於Java的項目功能羨慕?

public abstract class Father{ 
    protected DataModel dataModel; 
    public abstract void myQuestionFun(); 
} 
public class Child extends Father{ 

    public DataModel<TableInfo> tableList = new DataModel<TableInfo>; 
    public DataModel<TableInfo> getTableList(){ 
     return this.tableList; 
    } 

    @Override 
    public DataModel<Report> getDataModel(){ 
     return this.dataModel; 
    } 

    @Override 
    public void myQuestionFun(){ 
     List<TableInfo> tabList = new ArrayList<TableInfo>(); 
     for (int i=0; dataModel.getDataList().size(); i++) { 
      Report rep = (Report)dataModel.getDataList.get(i); 
      TableInfo tabInfo = new TableInfo(); 
      tabInfo.setId(rep.getId()); 
      tabInfo.setName(rep.getName()); 
      tabList.add(tabInfo); 
     } 
     tableList.setPage(dataModel.getPage()); 
     tableList.setSorter(dataModel.getSorter()); 
    } 
} 

問題是,解決這個問題的最好方法是什麼? 因爲myQuestionFun()是父類的抽象方法的函數,所以我無法移動它。

回答

1

提取物下面的代碼從孩子的方法到父親:

protected List<TableInfo> getTabList() { 
    final List<TableInfo> tabList = new ArrayList<TableInfo>(); 
    for (int i=0; dataModel.getDataList().size(); i++) { 
      Report rep = (Report) dataModel.getDataList.get(i); 
      TableInfo tabInfo = new TableInfo(); 
      tabInfo.setId(rep.getId()); 
      tabInfo.setName(rep.getName()); 
      tabList.add(tabInfo); 
    } 
    return tabList; 
} 

移動下面的方法來父親,如果它總是應該返回this.dataModel:

public DataModel<Report> getDataModel(){ 
    return this.dataModel; 
} 
+0

感謝您回答。 – sept08

+0

我接受你關於將getDateModel()方法移到Father的建議。但我不知道如何從孩子到父親提取一種方法。許多子類在我的項目中擴展到Father類,每個子類的myQuestionFun()方法的實現是不同的。 – sept08

+0

如果它總是返回this.dataModel,我建議將getDataModel()移到父親。如果情況並非如此,那麼要麼將其留在那裏,要麼將一個通用實現移至父親,並僅在需要的那些孩子中覆蓋它。 –

0

刪除dataModel字段格式Father並更改爲接口。