2017-06-19 2 views
1

Ich arbeite an einer Anwendung, die auf Java 1.7 arbeitet. Ich muss einen Code neu schreiben, der mit Java 1.8 mit SpringFramework geschrieben hat. Leider bin ich nicht mit einer neueren Version vertraut und ich weiß nicht, wie man diesen Code neu schreibt, um mit Java 7 zu arbeiten ...Konvertieren Lambda mit Methodenreferenz auf Funktion in Java 7

Unten Teil des Codes.

ConfigRepo:

public class ConfigRepo extends RepositoryRestConfigurerAdapter { 

    @Override 
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration repoRestConfig) { 
    repoRestConfig.withEntityLookup().forRepository(IConfigRepo.class, (Config config) -> { 
     ConfigPK pk = new ConfigPK(); 
     pk.setScope(config.getId().getScope()); 
     pk.setKey(config.getId().getKey()); 
     return pk; 
    }, IConfigRepo::findOne); 
} 

IConfigRepo:

public interface IConfigRepo extends CrudRepository<Config, ConfigPK> {} 

EDIT: meinen Code hinzugefügt.

Ich bin mir nicht sicher, ob das, was ich getan habe, Teil davon richtig gemacht. Ich weiß nicht, wie diese Config Config übergeben werden soll. Auch weiß ich nicht, was ich mit dieser Methode Referenz tun soll ...

Meine Version:

public class ConfigRepo extends RepositoryRestConfigurerAdapter { 

    @Override 
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration repoRestConfig) { 
    repoRestConfig.withEntityLookup().forRepository(IConfigRepo.class, new Config() { 
     public ConfigPK prepareConfigPK(Config config) { 
      ConfigPK pk = new ConfigPK(); 
      pk.setScope(config.getId().getScope()); 
      pk.setKey(config.getId().getKey()); 
      return pk; 
     }, IConfigRepo::findOne); 
} 
+0

Was ist Ihre Frage? –

+0

Ich denke, es ist ziemlich klar ... Ich bitte um Hilfe, um diesen Code in Java 7 umzuschreiben, weil ich damit nicht umgehen kann. – Lui

+1

Ich erkenne, dass Sie Hilfe wollen, aber wo kämpfen Sie? Was hast du versucht? Was funktioniert nicht? Wo ist dein Code? –

Antwort

2

Die Funktion forRepository scheint drei Argumente zu akzeptieren:

  1. A Class<IConfigRepo>
  2. Eine Instanz der Schnittstelle Converter<Config, ConfigPK>:

    public interface Converter<Config, ConfigPK> { 
        ConfigPK convert(Config config); 
    } 
    

    Es ist eigentlich eine generische Schnittstelle, aber ich habe die Typen eingefügt, die Sie dort verwenden.

  3. eine Instanz einer anderen funktionalen Schnittstelle Lookup<IConfigRepo, ID>

    public interface Lookup { 
        Object lookup(IConfigRepo repository, ID identifier) 
    } 
    

    Wieder eine generische Schnittstelle, aber ich eingeführt, um die Typen, die Sie (mit Ausnahme ID) verwenden.

So sind die beiden funktionale Schnittstelle Argumente können als Instanzen von anonymen Klassen neu geschrieben werden:

// Java 8 
(Config config) -> { 
    ConfigPK pk = new ConfigPK(); 
    pk.setScope(config.getId().getScope()); 
    pk.setKey(config.getId().getKey()); 
    return pk; 
} 

//Java 7 
new Converter<Config, ConfigPK>() { 
    @Override 
    public ConfigPK convert(Config config) { 
     ConfigPK pk = new ConfigPK(); 
     pk.setScope(config.getId().getScope()); 
     pk.setKey(config.getId().getKey()); 
     return pk; 
    } 
} 

und

// Java 8 
IConfigRepo::findOne 


// Java 7 
// ??? because I don't know your type for ID 
new Lookup<IConfigRepo, ???>() { 
    @Override 
    public Object lookup(IConfigRepo repository, ??? identifier) { 
      return repo.findOne(); 
    } 
} 

In Ihrem Code Sie die Java8 Stil Lambda und Methodenreferenz ersetzen als Parameter mit dem, was ich dort schrieb

+0

Grundsätzlich stammt die forRepository-Methode von Spring Data REST - [link] (http://docs.spring.io/spring-data/rest/docs/current/api/org/springframework/data/rest/core/config/ EntityLookupRegistrar.html # forRepository-java.lang.Class-org.springframework.core.convert.converter.Converter-org.springframework.data.rest.core.config.EntityLookupRegistrar.LookupRegistrar.Lookup-) – Lui

+0

Muss ich die aktualisieren Schnittstellen in meiner Antwort oder können Sie die Übertragung durchführen? – danielspaniol

+0

Wenn Sie dies tun könnten, speziell für den letzten Parameter ... Da die Deklaration dieser Methode von der CrudRepository-Schnittstelle stammt und die Implementierung in SimpleJpaRepository erfolgt. Und um ehrlich zu sein ist es ziemlich schwer für mich ... Was ist mehr, was ist mit diesen Namen für "new MethodName()"? Für das zweite Argument sollte es neue Config() sein? Und für dritten Parameter neues CrudRepository() ?? – Lui

Verwandte Themen