将带有方法引用的lambda转换为Java 7中的函数

将带有方法引用的lambda转换为Java 7中的函数,java,lambda,java-8,java-7,method-reference,Java,Lambda,Java 8,Java 7,Method Reference,我正在开发一个在Java1.7上运行的应用程序。我需要重写一些使用SpringFramework的Java1.8编写的代码。不幸的是,我不熟悉较新的版本,我不知道如何重写此代码以使用Java 7 下面是代码的一部分 ConfigRepo: public class ConfigRepo extends RepositoryRestConfigurerAdapter { @Override public void configureRepositoryRestConfigurat

我正在开发一个在Java1.7上运行的应用程序。我需要重写一些使用SpringFramework的Java1.8编写的代码。不幸的是,我不熟悉较新的版本,我不知道如何重写此代码以使用Java 7

下面是代码的一部分

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);
}
public interface IConfigRepo extends CrudRepository<Config, ConfigPK> {}
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);
}
IConfigRepo:

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);
}
public interface IConfigRepo extends CrudRepository<Config, ConfigPK> {}
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);
}

函数
forRepository
似乎接受三个参数:

  • A
  • 接口
    转换器的实例

    同样是一个通用接口,但是我插入了您使用的类型(除了
    ID

  • 因此,两个函数接口参数都可以重写为匿名类的实例:

    // 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;
        }
    }
    
    //Java 8
    (配置)->{
    ConfigPK pk=新的ConfigPK();
    pk.setScope(config.getId().getScope());
    setKey(config.getId().getKey());
    返回主键;
    }
    //爪哇7
    新转换器(){
    @凌驾
    公共配置PK转换(配置){
    ConfigPK pk=新的ConfigPK();
    pk.setScope(config.getId().getScope());
    setKey(config.getId().getKey());
    返回主键;
    }
    }
    

    //Java 8
    IConfigRepo::findOne
    //爪哇7
    // ??? 因为我不知道你的身份证类型
    新查找(){
    @凌驾
    公共对象查找(IConfigRepo存储库,?标识符){
    返回repo.findOne();
    }
    }
    

    在您的代码中,您可以用我在那里写的内容替换Java8风格的lambda和方法引用作为参数

    您的问题是什么?我认为这很清楚。。。我请求帮助将此代码重写为Java 7,因为我无法处理此问题。我知道您需要帮助,但您在哪里挣扎?你试了什么?什么不起作用?您的代码在哪里?只需将其转换为匿名类即可,例如:@C-Otto如果您不熟悉Java8的工作原理,那么在理解如何重写它时可能会遇到很多困难。例如,
    IConfigRepo::findOne
    我必须首先了解这是什么东西,然后找出如何还原它,因为它并不明显(另一种方式是非常明显的)。我认为吕对整个情况的解释是正确的。这不是小事,我也会迷路。基本上,forRepository方法来自Spring Data REST-我需要更新我答案中的接口吗?或者你可以进行传输吗?如果你可以这样做,特别是最后一个参数。。。因为此方法的声明来自CRUDEPository接口,并且实现在SimpleParepository中。老实说,这对我来说很难。。。此外,“new MethodName()”的名称是什么?对于第二个参数,它应该是new Config()?对于第三个参数new crudepository(),啊,它应该是这样的。。。谢谢你的帮助,我真的很感激!:)但我也不确定ID应该是什么类型。。。至少现在是这样,因为我刚刚开始使用这个应用程序。但我想知道。。。Java8如何知道在这个方法引用中应该使用什么??因为在Java8中,我们没有向这个函数传递任何对象。。。所以它必须知道应该用什么。。。