加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala隐式转换泛型参数

发布时间:2020-12-16 10:02:08 所属栏目:安全 来源:网络整理
导读:我有一些类似于以下的代码,其中我有一个函数,它接受List [TypeA],我希望能够用List [TypeB]调用它,其中我有一个从TypeA到TypeB的隐式转换. 我有一些示例代码,当我使用List inline调用方法时,但是如果首先将列表分配给变量,则该代码不起作用. 这里有一些有用
我有一些类似于以下的代码,其中我有一个函数,它接受List [TypeA],我希望能够用List [TypeB]调用它,其中我有一个从TypeA到TypeB的隐式转换.

我有一些示例代码,当我使用List inline调用方法时,但是如果首先将列表分配给变量,则该代码不起作用.

这里有一些有用的代码:

class Person(val name: String)
implicit def stringToPerson(str: String) : Person = new Person(str)

def printAll(list: List[Person]) {
  list.foreach(person => println("Person: " + person.name))
}

def callIt = {
  printAll(List("1","2","3"))
}

不幸的是,如果callIt看起来像这样:

def callIt = {
  val list = List("1","3")
  printAll(list)
}

我得到了它期望List [Person]的错误但是我给了一个List [String]

在我的实际代码中,我已经在其他地方定义了列表,因此它不会最终起作用.我该怎么做才能使它从String到Person的隐式转换,为什么它在第一种情况下工作但不在第二种情况下工作?

旁注:如果我指定列表的类型并让它进行转换,它也有效:

val list: List[Person] = List("1","3")

但同样,那不是我想要的.

我真的需要提供从List [String]到List [Person]的隐式转换吗?

解决方法

初始代码工作的原因是因为在printAll(List(“1”,“2”,“3”))中,编译器使用类型推断来知道在构造List之前需要Person.该行告诉编译器它需要一个List [Person]然后强制调用List()返回一个List [Person],它强制该调用的参数为Person,然后强制使用String的隐式转换对人.不幸的是,语句val list = List(“1”,“3”)没有说明需要类型列表[Person]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读