当使用 lambda 表达式而不是匿名内部类时,Spring 无法确定泛型类型
我正在玩Spring的,添加一个简单的转换器来将(Java 8)转换为:ConversionService
ZonedDateTime
String
@Bean
public ConversionServiceFactoryBean conversionServiceFactoryBean() {
ConversionServiceFactoryBean conversionServiceFactoryBean =
new ConversionServiceFactoryBean();
Converter<ZonedDateTime, String> dateTimeConverter =
new Converter<ZonedDateTime, String>() {
@Override
public String convert(ZonedDateTime source) {
return source.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
}
};
conversionServiceFactoryBean.setConverters(
new HashSet<>(Arrays.asList(dateTimeConverter)));
return conversionServiceFactoryBean;
}
这工作正常。但是我的IDE(IntelliJ)建议用lambda表达式替换匿名内部类:
Converter<ZonedDateTime, String> dateTimeConverter =
source -> source.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
如果我这样做,那么它就不再起作用了,我得到一个关于Spring无法确定泛型类型的错误:
Caused by: java.lang.IllegalArgumentException: Unable to the determine sourceType <S> and targetType <T> which your Converter<S, T> converts between; declare these generic types.
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.core.convert.support.GenericConversionService.addConverter(GenericConversionService.java:100)
at org.springframework.core.convert.support.ConversionServiceFactory.registerConverters(ConversionServiceFactory.java:50)
at org.springframework.context.support.ConversionServiceFactoryBean.afterPropertiesSet(ConversionServiceFactoryBean.java:70)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1627)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1564)
表示 lambda 表达式的对象显然与匿名内部类的对象有很大不同,以至于 Spring 无法再确定泛型类型。Java 8 如何使用 lambda 表达式来做到这一点?这是Spring中一个可以修复的错误,还是Java 8没有提供必要的信息?Class
Class
我使用的是Spring版本4.1.0.RELEASE和Java 8 update 20。