Java scala:为什么scala允许用Map/List/etc实现函数文本

Java scala:为什么scala允许用Map/List/etc实现函数文本,java,scala,Java,Scala,我定义了一个scala特征,如下所示: trait Example { def func: Int => Int } 编译器允许我通过以下方式实现它: class SomeClass extends Example { def func = Map(1->2, 3->4) } 我可以用List替换Map,它仍然可以工作。我的问题是:为什么?我不是将func声明为需要作为函数实现的函数文本吗 在更深层次上,scala的编译器如何检查函数签名 非常感谢 Int=>In

我定义了一个scala特征,如下所示:

trait Example {
  def func: Int => Int
}
编译器允许我通过以下方式实现它:

class SomeClass extends Example {
   def func = Map(1->2, 3->4)
}
我可以用
List
替换
Map
,它仍然可以工作。我的问题是:为什么?我不是将
func
声明为需要作为函数实现的函数文本吗

在更深层次上,scala的编译器如何检查函数签名


非常感谢

Int=>Int
设计
功能1[Int,Int]
Map[K,V]
List[A]
都将
Function1[A,B]
特性扩展为其集合层次结构的一部分,这就是编译器允许这些类型作为具体实现的原因

例如,地图:

trait MapLike[K, +V, +This <: MapLike[K, V, This] with Map[K, V]] extends PartialFunction[K, V]
trait MapLike[K,+V,+This