1
我無法找到什麼這就是所謂的和什麼區別是完全限定這樣的方法之間:Scala的:DEF方法[A](一些PARAMS)與DEF方法(一些PARAMS)
def method[A](//...//) {}
或
def method(//...//) {}
而且,是def method[A]
一樣def method[Any]
?
幫助將不勝感激。
我無法找到什麼這就是所謂的和什麼區別是完全限定這樣的方法之間:Scala的:DEF方法[A](一些PARAMS)與DEF方法(一些PARAMS)
def method[A](//...//) {}
或
def method(//...//) {}
而且,是def method[A]
一樣def method[Any]
?
幫助將不勝感激。
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
這是有道理的,但我會再假設我有問題,當我嘗試喜歡的東西:'高清方法[INT](A:列表[字符串]):字符串= {「foo」的} '但這在REPL中起作用......想法? (並感謝)我沒有得到問題,因爲我不使用泛型?我在沒有[A]的情況下嘗試了你的'打印'功能,並且我咆哮着...... – MCP
@MCP-嘗試在該方法中使用'Int'!你會發現它不是你所說的「Int」,而是一個通用類型。 (所以,沒有'+'或任何東西)。請注意,評論說**第一個必須的**,所以是的,你會咆哮! –