2016-07-29 2 views
1

Я пытаюсь понять программу в java, которая использовала лямбда для возврата объекта в ссылочную переменную интерфейса. Я хочу преобразовать лямбда в простое java-функцию, но не знаю, как это сделать.convert lambda to function/method

Программа выглядит следующим образом: -

public class AgentLicenseLazyModel extends CoreDataModel<AgentLicenseModel> { 

    public AgentLicenseLazyModel(final List<AgentLicenseModel> entities) { 
     super(AgentLicenseModel.class, entities, (sortField, sortOrder) -> { 
      return new AgentLicenseLazySorter(sortField, sortOrder); 
     }); 
    } 
} 

Вот это абстрактный класс:

public abstract class CoreDataModel<T extends AbstractEntityModel> extends LazyDataModel<T> { 

private final Class<T> entityClass; 
private final List<T> entities; 
private final CoreDataSorterProducer<T> coreDataSorterProducer; 

public CoreDataModel(final Class<T> entityClass, final List<T> entities, final CoreDataSorterProducer<T> coreDataSorterProducer) { 
    this.entityClass = entityClass; 
    this.entities = entities; 
    this.coreDataSorterProducer = coreDataSorterProducer; 

    if (entities != null) { 
     setRowCount(entities.size()); 
    } 
} 

Как преобразовать эту программу в простую программу Java без использования лямбды для обучения. Пожалуйста помоги.

Отредактировано: Здесь CoreDataSorterProducer:

@FunctionalInterface 
public interface CoreDataSorterProducer<T extends AbstractEntityModel> { 

    CoreDataSorter<T> produce(String sortField, SortOrder sortOrder); 
} 
+2

показать нам источник ядра CoreDataSorterProducer' – Andrew

+0

Я добавил CoreDataSorterProducer .. спасибо –

ответ

7

Тело лямбда-выражения является реализация единого абстрактного метода интерфейса CoreDataSorterProducer<AgentLicenseModel>.

Вы можете заменить выражение лямбда на экземпляр анонимного класса, который реализует CoreDataSorterProducer<AgentLicenseModel>.

public class AgentLicenseLazyModel extends CoreDataModel<AgentLicenseModel> { 
    public AgentLicenseLazyModel(final List<AgentLicenseModel> entities) { 
     super(AgentLicenseModel.class, entities, new CoreDataSorterProducer<AgentLicenseModel>() { 

      public AgentLicenseLazySorter theMethodName (TheTypeOfSortField sortField, TheTypeOfSortOrder sortOrder) 
      { 
       return new AgentLicenseLazySorter(sortField, sortOrder); 
      } 
     }); 
    } 
} 

Обратите внимание, что theMethodName, TheTypeOfSortField и TheTypeOfSortOrder следует заменить имя метода интерфейса CoreDataSorterProducer и типы аргументов.

+0

Привет, это было очень полезно. благодаря –