Java lambda - return 语句中对象的类型转换?

Java lambda - type cast of object in return statement?


我的 spring 云应用程序中有以下代码:

@EnableBinding(Source.class)
@SpringBootApplication
public class dataflow_producer {

static SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss"); 

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

}

@Bean
@InboundChannelAdapter(value = Source.OUTPUT)
public MessageSource<String> timerMessageSource() {       
    return ()-> new GenericMessage<String>(dateFormatter.format(new Date()));
}
}

我的问题是,这个语句是如何工作的? :

return ()-> new GenericMessage<String>(dateFormatter.format(new Date()));

它会像这样重新输入对象吗? :

return (MessageSource<String>)new GenericMessage<String>(dateFormatter.format(new Date()));

你能解释一下 return ()-> 的意思吗?为什么在这种情况下有效?输入是 GenericMessage<T> 类型的 Object,但输出是 MessageSource<T> 类型的 Object ?

是否可以将提到的 return 语句重写为非 lambda 代码?

我不知道Spring。

虽然,在Java 8.当你得到一个SAM接口(单一抽象方法)。例如调用 "SAMInterface".

public interface SAMInterface {
    void theSAMMethod();
}

如果你需要return一个"SAMInterface"类型的对象,这些代码是等价的:

SAMInterface toReturn = () -> println("Hello World!");

SAMInterface toReturn = new SAMInterface() {
    public void theSAMMethod() {
      println("Hello World!");
    }
}

因此,如果 MessageSource<T> 接口恰好有 1 个方法需要重新定义。 你可以使用 lambda :)