有时候我们需要重写一个interface里的方法,往往采用匿名内部类的方法来重写,但是这个过程比较繁琐,因此我们引入了lambda表达式,提高开发效率
- 举例(以redis存储为例子)
- 使用匿名内部类
SessionCallback callBack = new SessionCallback<Role>() { @Override public Role execute(RedisOperations ops) throws DataAccessException { ops.boundValueOps("role_1").set(role); return (Role) ops.boundValueOps("role_1").get(); } }; Role saveRole = (Role)redisTemplate.execute(callBack);
- 使用lambda表达式
Role saveRole = (Role)redisTemplate.execute((RedisOperations ops) -> { ops.boundValueOps("role_1").set(role); return (Role) ops.boundValueOps("role_1").get(); } );
- 使用匿名内部类
- 总结:上述代码跟匿名内部类的作用是一样的。除了省略了接口名和方法名,有时候代码中把参数表的类型也省略了。这得益于javac的类型推断机制,编译器能够根据上下文信息推断出参数的类型,当然也有推断失败的时候,这时就需要手动指明参数类型了。注意,Java是强类型语言,每个变量和对象都必需有明确的类型。