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

时间:2015-02-27 11:00:32

标签: scala overloading type-erasure

我有一个方法:

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]) = {
      ^

1 个答案:

答案 0 :(得分:4)

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

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