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

Convert lambda with method reference to function in Java 7

我正在开发一个正在 Java 1.7 上运行的应用程序。我需要用 SpringFramework 重写一些用 Java 1.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);
}

IConfigRepo:

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

编辑: 添加了我的代码。

我不确定我所做的部分是否正确。不知道这个Config配置应该怎么传。我也不知道我应该用这个方法参考做什么...

我的版本:

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似乎接受三个参数:

  1. 一个Class<IConfigRepo>
  2. 接口实例Converter<Config, ConfigPK>:

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

    它实际上是一个通用接口,但我在其中插入了您使用的类型。

  3. 另一个功能接口的实例Lookup<IConfigRepo, ID>

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

    同样是通用接口,但我插入了您使用的类型(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
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();
     }
}

在您的代码中,您可以将 Java8 样式的 lambda 和方法引用替换为我在此处编写的参数