2016-07-19 2 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

Extract следующего кода в качестве метода от ребенка в Отец:

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() отцу. но я не знаю, как извлечь метод от ребенка к отцу. многие подклассы распространяются на класс Отца в моем проекте, реализация метода myQuestionFun() для каждого подкласса отличается. – sept08

+0

Я предложил переместить getDataModel() отцу, если он всегда возвращает this.dataModel. Если это не так, то либо оставите его там, либо передайте родовую реализацию Отцу и переопределите его только тем детям, где это необходимо. –

0

Удалить dataModel Полевая форма Father и изменить его на интерфейс.