Any和泛型之间的区别

Gui*_*lle 1 scala

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

def flatten(ls: List[Any]): List[Any] = ls flatMap {
    case ms: List[_] => flatten(ms)
    case e => List(e)
  }
Run Code Online (Sandbox Code Playgroud)

要么

def flatten(ls: List[A]): List[A]
Run Code Online (Sandbox Code Playgroud)

Kao*_*Kao 7

其中一个区别是,当你服用时Any,你会丢失所有类型的信息,但是对于泛型,你仍然有类型的概念.

例如,如果你有一个函数(Any) => Any,你可以采用任何类型并返回任何类型.

但是使用泛型,你可以限制,如果你拿一个实例,T你也必须返回一个实例T,如(T) => T.

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