1

我很难找到这被称为什么以及定义这样的方法之间的区别是什么:

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

或者

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

另外,是def method[A]一样的def method[Any]吗?

帮助将不胜感激。

4

1 回答 1

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
于 2013-08-26T22:28:34.767 回答