我有一个Akka Actor,它的接收方法具有以下大小写模式匹配检查,如下所示:
def receive = {
case x: (String, ListBuffer[String]) if(x._2.size >= 0) => {
.....
.....
}
编译时,我会看到以下编译器警告:
warning: non-variable type argument String in type pattern (String, scala.collection.mutable.ListBuffer[String])
is unchecked since it is eliminated by erasure)
关于如何摆脱它们的任何线索?我不想将编译器设置设置为忽略这些警告,但我没有看到编译器发出警告的原因?
答案 0 :(得分:3)
这是由于JVM的类型擦除。在运行时,JVM只能看到ListBuffer[Any]
。泛型的静态类型信息丢失了。如果您不关心ListBuffer的泛型类型,可以将模式匹配更改为:
case x: (String, ListBuffer[_]) if(x._2.size >= 0) =>
答案 1 :(得分:2)
我喜欢用于此问题的一个小技巧是类型别名。
type MyBuffer = ListBuffer[String]
//...
def receive = {
case x: (String, MyBuffer) if(x._2.size >= 0) => {
//.....
//.....
}