2016-07-29 14 views
1

ラムダを使ってインタフェースの参照変数にオブジェクトを返すjavaのプログラムを理解しようとしています。ラムダを単純なJava関数に変換したいが、どうやってそれを行うのかはわからない。ラムダを関数/メソッドに変換する

次のようにプログラムがある: - ここに

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プログラムには、このプログラムを変換する方法。助けてください。編集

@FunctionalInterface 
public interface CoreDataSorterProducer<T extends AbstractEntityModel> { 

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

私たちに 'CoreDataSorterProducer'クラスソースを表示 – Andrew

+0

私はCoreDataSorterProducerを追加しました。ありがとう –

答えて

7

ラムダ式の本体はCoreDataSorterProducer<AgentLicenseModel>インターフェースの単一の抽象メソッドの実装である: ここCoreDataSorterProducerあります。

ラムダ式を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); 
      } 
     }); 
    } 
} 

theMethodNameTheTypeOfSortFieldTheTypeOfSortOrderCoreDataSorterProducerインタフェースとその引数の型のメソッド名に置き換えられる必要があることに注意してください。

+0

こんにちはこれは非常に役に立ちました。ありがとう –

関連する問題