可以不重载仅将函数(不同类型)作为参数的方法吗?

Can one not overload methods that just take a function (of different types) as parameter?

我有一个方法:

def udf(func: RDD[Row] => RDD[Row]) = ...

和另一种方法:

def udf(func: List[String] => List[String]) = ...

在 Scala 中。它给了我这个:

Error:(...) double definition:
method udf:(func: List[String] => List[String])UDFOperator and
method udf:(func: org.apache.spark.rdd.RDD[Row] => org.apache.spark.rdd.RDD[Row])UDFOperator at ...
have same type after erasure: (func: Function1)UDFOperator
  def udf(func: List[String] => List[String]) = {
      ^

JVM 不支持泛型,因此 Scala 可能需要解析运行时泛型类型检查的任何事情都无法完成。

在您的情况下,两种方法都需要 Function1[_,_] 个参数,并且 JVM 无法分辨它们之间的区别。您必须重命名其中之一。