2013-08-26 91 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」,而是一個通用類型。 (所以,沒有'+'或任何東西)。請注意,評論說**第一個必須的**,所以是的,你會咆哮! –