调用未知类型的 Java 方法并将结果传递给 Scala 中的另一个 Java 方法无法编译

问题描述 投票:0回答:1

我在 Scala 中使用 Optaplanner,我这样调用“groupBy”方法:

    factory
      .forEach(classOf[ClassA])
      .filter(classA => classA.classB != null)
      .groupBy((classA: ClassA) => classA.classB)
      ....

这行得通。但是,如果我尝试像这样添加 count() 约束收集器

    factory
      .forEach(classOf[ClassA])
      .filter(classA => classA.classB != null)
      .groupBy((classA: ClassA) => classA.classB, count())
      ....

它抱怨“无法解析重载方法'groupBy'”。

我试过显式传递通用类型:

    factory
      .forEach(classOf[ClassA])
      .filter(classA => classA.classB != null)
      .groupBy((classA: ClassA) => classA.classB, count[ClassB]())
      ....

count()约束收集器参数有类型

UniConstraintCollector[ClassB, _, Integer]

而 groupBy 方法有签名:

<GroupKey_, ResultContainer_, Result_> BiConstraintStream<GroupKey_, Result_> groupBy(
            Function<A, GroupKey_> groupKeyMapping,
            UniConstraintCollector<A, ResultContainer_, Result_> collector)

但这并没有改变结果。

知道这里出了什么问题吗?

scala generics optaplanner
1个回答
0
投票

根据签名,

groupBy
的两个函数参数应该从同一个
A
映射,但您试图将它应用于从
ClassA
映射的第一个函数和从
ClassB
映射的第二个函数。

编译如下:

.groupBy((classA: ClassA) => classA.classB, count[ClassA]())
© www.soinside.com 2019 - 2024. All rights reserved.