将带有方法引用的 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
似乎接受三个参数:
- 一个
Class<IConfigRepo>
接口实例Converter<Config, ConfigPK>
:
public interface Converter<Config, ConfigPK> {
ConfigPK convert(Config config);
}
它实际上是一个通用接口,但我在其中插入了您使用的类型。
另一个功能接口的实例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 和方法引用替换为我在此处编写的参数
我正在开发一个正在 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
似乎接受三个参数:
- 一个
Class<IConfigRepo>
接口实例
Converter<Config, ConfigPK>
:public interface Converter<Config, ConfigPK> { ConfigPK convert(Config config); }
它实际上是一个通用接口,但我在其中插入了您使用的类型。
另一个功能接口的实例
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 和方法引用替换为我在此处编写的参数