![](/img/trans.png)
[英]Understanding “lambda expressions” in Java in the context of “lambda” and “anonymous classes”
[英]Understanding java 8 lambda expressions used to define Spring Security beans
@Bean
public AuthenticationEntryPoint unauthorizedEntryPoint() {
return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
如何理解这个(request, response, authException) ->
,它在哪里找到所有这 3 个变量? 没有在类领域。
它是什么->
?
AuthenticationEntryPoint
是一个函数式接口(一个只包含一个公共方法的接口: commence
)。 可以使用 Java Lambda 表达式创建功能接口实现。
在 java 8 之前的编程风格中,您可以使用匿名类:
@Bean
public AuthenticationEntryPoint unauthorizedEntryPoint() {
AuthenticationEntryPoint entryPoint = new AuthenticationEntryPoint() {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
};
return entryPoint;
}
在这里,我们创建了一个AuthenticationEntryPoint
匿名类,我们在其中实现了AuthenticationEntryPoint.commence()
的行为。
Java 8 lambda 表达式提供了语法糖来将代码简化为:
return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
request, response, authException
将在调用时提供给方法。
更多信息: https : //docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.