This question already has answers here:
What is the breakdown for Java's lambda syntax?

(4个答案)


6小时前关闭。





我有下面的示例代码
@SpringBootApplication
public class Application implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(Application.class);

    @Autowired
    private AppName appName;

    @Bean
    public AppName getAppName(@Value("${app.name}") String appName) {

        return () -> appName;
    }

    @Override
    public void run(String... args) throws Exception {

        logger.info("Application name: {}", appName.getName());
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

接口
interface AppName {

    String getName();
}

这是resources/application.properties
spring.main.banner-mode=off
spring.main.log-startup-info=false
app.name=SpringBootBean

我想知道,当调用getAppName时(正在传递值SpringBootBean,这是从app.name文件中的application.properties参数开始的),将创建正在实现AppName接口的匿名类。
匿名类的样子如何?由于getName,必须首先设置。实施类中的设置如何发生?在哪里设置SpringBootBean以便可以检索它?
我很困惑,有人可以帮忙吗?

最佳答案

实现该接口的匿名类如下所示:: () -> appName;。可能是因为接口起作用。 I. E.只有一种方法。
该实现返回传入的参数。这称为闭包。
未设置值SpringBootBean。它是从函数返回的。

09-16 04:25