我很难找到这个叫做什么,以及在定义这样的方法之间有什么区别:
def method[A](//...//) {}
或
def method(//...//) {}
此外,def method[A]
与def method[Any]
相同吗?
非常感谢帮助。
答案 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