Akka示例开发遇Scala类型不匹配问题:字符串复制报错
嗨,这个类型不匹配的问题我之前也踩过坑!本质上是Java原生的java.lang.String和你代码里某个自定义的String类型撞名冲突了——大概率是你不小心在当前包下定义了同名的String类,或者导包时误引入了自己写的String而非默认的Java String。
具体解决思路
- 先排查自定义类:看看当前项目的包结构里,有没有
String.scala或者String.java这类文件。如果有,要么给这个自定义类重命名(比如改成MyString),要么在需要用原生String的地方加上全限定名java.lang.String。 - 检查导包语句:扫一眼代码顶部的import,有没有类似
import com.yourpackage.String的语句?如果有,要么删掉这个导包,要么明确指定使用原生String。 - 统一Akka消息的类型:如果是消息定义时用了自定义String,而发送消息时传了原生String,就会触发这个错误。比如下面这个错误示例:
改成统一用原生String就没问题:// 错误:自定义了String类 class String(val value: java.lang.String) case class CopyString(s: String) // 这里的String是自定义的 // 发送消息时用了原生String,类型不匹配 actorRef ! CopyString("test")// 正确:消息用原生String case class CopyString(s: String) // Scala默认导入java.lang.String,直接用就行 class StringCopierActor extends Actor { override def receive: Receive = { case CopyString(s) => sender() ! s * 2 // 字符串复制逻辑 } }
内容的提问来源于stack exchange,提问作者DingoStiglitz
相关产品推荐
相关产品推荐

