相关疑难解决方法(0)

Java 8 lambda和带抽象类的接口扩展

假设我想声明Spring RowMapper,但不是创建动态类,而是实现一个实现RowMapper的抽象类.这是我的方法签名:

SqlProcedure#declareRowMapper(RowMapper<?> rowMapper);
Run Code Online (Sandbox Code Playgroud)

CustomRowMapper.java:

public abstract class CustomRowMapper<T> implements RowMapper<T> {
    protected A a = new A();
}
Run Code Online (Sandbox Code Playgroud)

旧的Java方式是写:

sqlProc.declareRowMapper(new CustomRowMapper<Object>() {
    @Override
    public Object mapRow(ResultSet rs, int rowNum) {
        a.doSomething(rs, rowNum);
        return new Object();
    }
});
Run Code Online (Sandbox Code Playgroud)

是否有可能用lambda表达式实现相同的功能?我想做这样的事情:

sqlProc.declareRowMapper((rs, rowNum) -> {
    a.doSomething(rs, rowNum);
    return new Object();
});
Run Code Online (Sandbox Code Playgroud)

但后来我会得到一个编译错误说a cannot be resolved.这是因为Java将此视为该RowMapper#mapRow方法的实现,而不是CustomRowMapper#mapRow.

如何通过lambda表达式告诉Java使用CustomRowMapper而不是RowMapper?这甚至可能吗?

java lambda spring java-8

11
推荐指数
2
解决办法
9743
查看次数

标签 统计

java ×1

java-8 ×1

lambda ×1

spring ×1