Any和泛型之间的区别

时间:2016-01-29 13:38:28

标签: scala

我见过这个功能。我用泛型类型创建了这个函数,但我看到了这个解决方案。我不知道输入Any的args是否更好或者有所不同。

def flatten(ls: List[Any]): List[Any] = ls flatMap {
    case ms: List[_] => flatten(ms)
    case e => List(e)
  }

def flatten(ls: List[A]): List[A]

1 个答案:

答案 0 :(得分:7)

其中一个不同之处在于,当您使用Any时,您会丢失所有类型信息,但是对于泛型,您仍然有类型的概念。

例如,如果您的函数为(Any) => Any,则可以采用任何类型并返回任何类型。

使用通用名称,您可以限制,如果您使用T的实例,则还必须将T的实例返回为(T) => T

使用泛型将使编译器能够帮助您检查您是否确实返回List[T]