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 :)
我的 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 :)