scala中泛型函数和多态参数类型之间有什么区别?

时间:2016-11-24 08:21:38

标签: scala

这两个函数声明之间有什么区别?

def fn[T <: A](t: T): Unit = ()

def fn(a: A): Unit = ()

1 个答案:

答案 0 :(得分:3)

这是Universal多态性的两个子类型:Parametric&amp; Inclusion(继承/子类型)。他们有自己的专业人士和缺点,但对于这种特殊情况的区别,我可以想象,对于类型多态,你会错过重载函数的可能性(包含多态性的有价值部分)。

例如:

class A
class B // extends A // - if it is needed

class Foo {
  def fn(t: A): Unit = ()
  def fn(t: B): Unit = () // - is OK
}

class Boo {
  def fn[T <: A](t: T): Unit = ()
  def fn[T <: B](t: T): Unit = () // - is not OK (func names conflict)
}