将带有方法引用的lambda转换为Java 7中的函数
我正在开发一个在Java1.7上运行的应用程序。我需要重写一些使用SpringFramework的Java1.8编写的代码。不幸的是,我不熟悉较新的版本,我不知道如何重写此代码以使用Java 7 下面是代码的一部分 ConfigRepo:将带有方法引用的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
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
似乎接受三个参数:
类
转换器的实例
:
同样是一个通用接口,但是我插入了您使用的类型(除了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中,我们没有向这个函数传递任何对象。。。所以它必须知道应该用什么。。。