2013-08-26 89 views

回答

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 
+0

这是有道理的,但我会再假设我有问题,当我尝试喜欢的东西:'高清方法[INT](A:列表[字符串]):字符串= {“foo”的} '但这在REPL中起作用......想法? (并感谢)我没有得到问题,因为我不使用泛型?我在没有[A]的情况下尝试了你的'打印'功能,并且我咆哮着...... – MCP

+0

@MCP-尝试在该方法中使用'Int'!你会发现它不是你所说的“Int”,而是一个通用类型。 (所以,没有'+'或任何东西)。请注意,评论说**第一个必须的**,所以是的,你会咆哮! –