数组 – Scala中的Array [String]不是Seq [String]的子类?
发布时间:2020-12-16 19:00:49 所属栏目:安全 来源:网络整理
导读:我写了一个接受Seq [String]的所有子类的对象的方法.不幸的是它不会接受Array [String]类型的对象. Array [String]不是Seq [String]的子类? scala def test[T : Seq[String]](x: T) = {}test: [T : Seq[String]](x: T)Unitscala val data = "This is a test
我写了一个接受Seq [String]的所有子类的对象的方法.不幸的是它不会接受Array [String]类型的对象. Array [String]不是Seq [String]的子类?
scala> def test[T <: Seq[String]](x: T) = {} test: [T <: Seq[String]](x: T)Unit scala> val data = "This is a test string" data: java.lang.String = This is a test string scala> test(data.split(" ")) <console>:10: error: inferred type arguments [Array[java.lang.String]] do not conform to method test's type parameter bounds [T <: Seq[String]] test(data.split(" ")) 解决方法
不,Array [String]转换为常规JVM数组,就像您在Java中看到的那样:String [].
您看到您在其他Scala Seq集合上看到的Array [String]上的所有操作的原因是从Array [T]到 做这个: def test[T <% Seq[String]](x: T) = {} 这被称为视图界限.这意味着T应该是Seq [String]的子类型,或者应该存在一个将T转换为Seq [String]的范围内的隐式转换.在幕后,编译器实际上添加了一个隐式参数进行测试,所以这个方法变成: scala> def test[T <% Seq[String]](x: T) = {} test: [T](x: T)(implicit evidence$1: T => Seq[String])Unit 这个隐含证据$1是现在作为在方法体内从T到Seq [String]的隐式转换的函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |