Преобразование лямбда-функции со ссылкой на функцию в Java 7
Я работаю над приложением, которое работает на Java 1.7. Мне нужно переписать некоторый код, который был написан на Java 1.8 с SpringFramework. К сожалению, я не знаком с более новой версией и не знаю, как переписать этот код для работы с 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> {}
РЕДАКТИРОВАТЬ: добавил мой код.
Я не уверен, правильно ли я это сделал. Я не знаю, как этот конфиг конфигурации должен быть передан. Также я не знаю, что я должен делать с этим методом ссылки...
Моя версия:
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);
}
1 ответ
Функция 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 как параметры на то, что я там написал