在Scala中输入Any和String之间的不匹配

Pun*_*tan 0 scala type-mismatch

def foo(x : Array[Any]) = println(x.length);
foo(Array[String]("test", "test"));
Run Code Online (Sandbox Code Playgroud)

此代码将引发错误消息:

:6: error: type mismatch;

found   : Array[String]

 required: Array[Any]
       foo(Array[String]("test", "test"))
Run Code Online (Sandbox Code Playgroud)

Scala中的所有类都直接或间接地从Any类继承.所以String是Any.为什么我们不能将Array [String]传递给foo方法?

dmi*_*try 8

数组在其参数的类型上是不变的,这意味着它StringAny,但Array[String]不是Array[Any].

def foo[T](x: Array[T])或者def foo(x: Array[_])都会奏效.