2016-07-29 13 views
1

Ich versuche ein Programm in Java zu verstehen, das Lambda verwendet hat, um ein Objekt in die Referenzvariable einer Schnittstelle zurückzugeben. Ich möchte Lambda in einfache Java-Funktion konvertieren, aber nicht sicher, wie es geht.Lambda in Funktion/Methode konvertieren

Das Programm ist wie folgt: -

public class AgentLicenseLazyModel extends CoreDataModel<AgentLicenseModel> { 

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

Hier ist die abstrakte Klasse ist: ohne Verwendung von Lambda-Lern

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()); 
    } 
} 

Wie dieses Programm in eine einfache Java-Programm zu konvertieren. Bitte helfen Sie.

Editiert: ist die CoreDataSorterProducer:

@FunctionalInterface 
public interface CoreDataSorterProducer<T extends AbstractEntityModel> { 

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

Zeigen Sie uns 'CoreDataSorterProducer' Klasse Quelle – Andrew

+0

Ich habe den CoreDataSorterProducer hinzugefügt .. danke –

Antwort

7

Der Körper des Lambda-Ausdrucks ist die Umsetzung der einzigen abstrakten Methode der CoreDataSorterProducer<AgentLicenseModel> Schnittstelle.

Sie können den Lambda-Ausdruck durch eine anonyme Klasseninstanz ersetzen, die CoreDataSorterProducer<AgentLicenseModel> implementiert.

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); 
      } 
     }); 
    } 
} 

Beachten Sie, dass theMethodName, TheTypeOfSortField und TheTypeOfSortOrder sollte durch den Namen der Methode der CoreDataSorterProducer Schnittstelle und die Art ihrer Argumente ersetzt werden.

+0

Hi das war sehr hilfreich. Vielen Dank –

Verwandte Themen