Скажем, я хочу объявить Spring RowMapper
, но не создать динамический класс, а реализовать абстрактный класс, который реализует RowMapper. Это моя подпись метода:
SqlProcedure#declareRowMapper(RowMapper<?> rowMapper);
CustomRowMapper.java:
public abstract class CustomRowMapper<T> implements RowMapper<T> {
protected A a = new A();
}
Старый способ Java должен был бы написать:
sqlProc.declareRowMapper(new CustomRowMapper<Object>() {
@Override
public Object mapRow(ResultSet rs, int rowNum) {
a.doSomething(rs, rowNum);
return new Object();
}
});
Можно ли добиться того же самого результата с лямбда-выражениями? Я хотел бы сделать что-то вроде этого:
sqlProc.declareRowMapper((rs, rowNum) -> {
a.doSomething(rs, rowNum);
return new Object();
});
Но тогда я получу ошибку компиляции, говоря a cannot be resolved
. Это потому, что Java рассматривает это как реализацию метода RowMapper#mapRow
, а не CustomRowMapper#mapRow
.
Как я могу сказать Java использовать мой CustomRowMapper вместо RowMapper через лямбда-выражения? Возможно ли это?