我有一个问题,在Java 8为什么可以传递方法引用而不是转换器实例?
的解决方法种类:: lambda表达式鉴于这种方法的例子,它使用给定的弹簧核心转换器实现转换的对象的列表:
public static <S, T> List<T> convertToList(Collection<? extends S> input, Converter<S, T> converter) {
List<T> results = new ArrayList<>(input != null ? input.size() : 0);
if (input != null && !input.isEmpty()) {
for (S element : input) {
results.add(converter.convert(element));
}
}
return results;
}
然后说我有一个特定的实现,BoatConverter:
调用此的public class BoatConverter implements Converter<Boat, BoatConverted> {
@Override
public BoatConverted convert(Boat boat) {
// ...
}
}
一种方法是:
ConversionHelper.convertToList(response.getBoats(), boatConverter)
然而,我注意到,Java编译器(和预期结果),与此同样高兴:
ConversionHelper.convertToList(response.getBoats(), boatConverter::convert)
鉴于转换()在这种情况下返回BoatConverted,但convertToList()期待一个转换器类型,我的问题是编译器如何解决这个明显的冲突,特别是因为你传入一个convert()的lambda表达式,但是convertToList()实用程序方法想要在传入的期望转换器对象上调用该方法?
转换器是一个功能接口。 –