scala – 为什么这个擦除警告与成员变量声明为一个元组?
发布时间:2020-12-16 19:02:10 所属栏目:安全 来源:网络整理
导读:看看这个 Scala类: class Example { val (x,y): (Int,Int) = (1,2)} 编译会导致警告: Example.scala:2: warning: non variable type-argument Int in type pattern (Int,Int) is unchecked since it is eliminated by erasure val (x,2) ^ 删除显式类型注
看看这个
Scala类:
class Example { val (x,y): (Int,Int) = (1,2) } 编译会导致警告: Example.scala:2: warning: non variable type-argument Int in type pattern (Int,Int) is unchecked since it is eliminated by erasure val (x,2) ^ 删除显式类型注释可以摆脱这个警告: class Example { val (x,y) = (1,2) } 为什么我得到警告,为什么删除显式类型注释摆脱它?只要我看不到什么真正的变化,x和y仍然是Int类型,没有类型注释. 解决方法
您可以将您的示例重写为:
class Example { val Tuple2(x,y): Tuple2[Int,Int] = Tuple2(1,2) } 此模式匹配实际上由2个匹配组成 – 现在说:使用Tuple2 [Int,Int]类型的右侧对象,并调用方法在Tuple2协同对象上取消应用[Int,Int].取消应用[Int,Int]将验证对象确实具有类型Tuple2,并且其结果值将用于将值绑定到变量x和y. 之后,该模式匹配包含:Tuple2 [Int,Int],所以它尝试做一个isInstanceOf [Tuple2 [Int,Int]]检查动态查看对象是否另外具有类型Tuple2 [Int,Int].然而,泛型类型信息在运行时被擦除,所以编译器警告说,它不能实际产生验证对象被实例化的类型参数[Int,Int]的代码. 以同样的方式,在以下模式匹配中: val a: AnyRef = (1,2) a match { case t2: Tuple[Int,Int] => } 你会得到类似的警告. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |