lambda里面的类类型在collectors-map-java8中

时间:2016-03-22 18:49:59

标签: java dictionary lambda java-stream collectors

我有一个方法签名,用于根据Method类型的给定getter方法使用反射来获取setter方法。 该方法的签名如下:

Method getSetter(final Method getterMethod, final Class classType)

现在从类的方法我想要一个getter方法的映射到关联的setter方法。我的代码如下:

final Method[] methods = classType.getMethods();
        Stream.of(methods)
                .filter(ReflectionUtils::isGetter)
                .collect(Collectors.toMap(Function.identity(), (method) -> getSetter(method, classType)));

我在getSetter上遇到编译错误(method,classType) 它说错误的第一个类型参数找到:<lambda parameter>,必填:java.lang.reflect.Method

我也尝试过指定lambda参数的类型。见下文

Stream.of(methods)
                .filter(ReflectionUtils::isGetter)
                .collect(Collectors.toMap(Function.identity(), (Method method) -> getSetter(method, classType)));

现在它说不能推断功能接口类型。

1 个答案:

答案 0 :(得分:0)

您的代码适用于javac 8u25,u40,u60,u71以及ecj 3.10.2。这里唯一的问题是原始Class参数,它会发出警告。它应该使用<?>参数化:

Method getSetter(final Method getterMethod, final Class<?> classType) { ... }