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”,而是一个通用类型。 (所以,没有'+'或任何东西)。请注意,评论说**第一个必须的**,所以是的,你会咆哮! –