【问题标题】:Can one not overload methods that just take a function (of different types) as parameter?不能重载仅将(不同类型的)函数作为参数的方法吗?
【发布时间】:2015-02-27 11:00:31
【问题描述】:

我有一个方法:

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

【问题讨论】:

    标签: scala overloading type-erasure


    【解决方案1】:

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

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

    【讨论】:

    • 好的,我刚试过def s(a: List[Int]) = a.size & def s(a: List[String]) = a 也不起作用。这说得通。如果我必须在那里做同样的事情,我可以做def s[T](a: List[T]) = a.size
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    相关资源
    最近更新 更多