如何为抽象类编写lambda表达式

Dev*_*dra 5 java lambda anonymous-class java-8

我有抽象类,有两个方法如下:

public abstract class SessionExecutionBody {
   public Object execute() {
     executeWithoutResult();
     return null;
   }

   public void executeWithoutResult() {}
} 
Run Code Online (Sandbox Code Playgroud)

我按如下方式实现了这个类:

final HTTPDestination destination = sessionService.executeInLocalView(new SessionExecutionBody() {
            @Override
            public Object execute() {
                userService.setCurrentUser(userService.getAdminUser());
                final String destinationName = getConfigurationService().getConfiguration().getString(DESTINATION_PROPERTY);
                return getHttpDestinationService().getHTTPDestination(destinationName);
Run Code Online (Sandbox Code Playgroud)

当我运行sonarLint时,它显示的主要问题是将这个匿名类转换为lambda表达式,但是我无法找到相同的方法,我可以将该表达式转换为lambda吗?

And*_*lko 8

我怕你不能.这不是一个功能接口,有一个抽象方法以lambda样式实现它.

我可以将该表达式转换为lambda吗?

您可以进行以下更改:

@FunctionalInterface // to guarantee the next rule
interface SessionExecutionBody {
    Object execute(); // has exactly one abstract method

    default void executeWithoutResult() {} // other methods should be default/static
}
...
sessionService.executeInLocalView(() -> { /* a body */ return ...; })
Run Code Online (Sandbox Code Playgroud)