Scala:def方法[A](一些参数)vs def方法(一些参数)

时间:2013-08-26 22:07:49

标签: scala

我很难找到这个叫做什么,以及在定义这样的方法之间有什么区别:

def method[A](//...//) {}

def method(//...//) {}

此外,def method[A]def method[Any]相同吗?

非常感谢帮助。

1 个答案:

答案 0 :(得分:7)

def method[A]定义泛型类型 A。像这样使用,没有细化,它是一个可以被任何类型满足的通配符。 (您可以指定仅允许某些子类型使用[A <: Foo]等语法,其中Foo是您定义的类或特征。)

你为什么要这样做?最有可能的是,您需要一个返回与参数相同类型的方法(或其某些变体 - 可能需要该类型的列表并返回该类型的数组):

def method[A](a: A): A = ...

由于您对A一无所知,因此它与Any一样通用。

现在,A并没有什么特别之处。你可以放任何东西,甚至是Any

def method[Any](a: Any) ...    // Don't do this!

但这会让人非常困惑,因为这不是你的标准Any类型,它位于继承层次结构的顶层 - 它是一个类似A的泛型类型,但是更长名。

如果您不需要使用泛型类型,请省略[A]。例如:

def printed[A](a: A): A = { println(a); a }   // Generic necessary
def printMe(a: Any) { println(a) }            // Not necessary, returns Unit