【问题标题】:Class type in lambda inside collectors-map-java8collectors-map-java8 内 lambda 中的类类型
【发布时间】:2016-07-09 20:04:38
【问题描述】:

我有一个方法签名,用于使用基于 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)));

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

【问题讨论】:

  • 我无法重现这个。 ideone.com/xt5Fb6 请您检查您的导入,指定 Java 的确切版本以及您使用的编译器。
  • 嘿谢谢!!实际上,对于 getSetter 方法,我正在抛出 NoSuchMethodException 我应该改为创建一个 try catch 块。我变了。它奏效了。

标签: java dictionary lambda java-stream collectors


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2019-04-17
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多