我使用WartRemover工具来避免Scala 2.11代码中可能出现的错误。
具体来说,我想知道如何解决" 产品类型推断" 错误。
查看repo文档,我只能看到失败的例子,但我想知道我是如何修复该错误的:
https://github.com/puffnfresh/wartremover#product
完成我的作业后,我最终得到了另一个链接,解释了如何修复类型推断失败错误https://blog.cppcabrera.com/posts/scala-wart-remover.html。我引用" 如果你看到下面的任何警告,修复通常就像提供类型注释一样简单"但我不明白这意味着什么。我真的需要一个具体的例子。
答案 0 :(得分:5)
Product
是一种非常抽象的高级类型,约束很少。当推断类型为Product
时,通常表明您犯了错误。例如。如果你有:
List((1, "hi", 0.4f), (2, "bye"), (3, "aloha", 7.2f))
然后这将编译好,给你一个List[Product]
。但是,就像推断Any
时一样,这可能是一个错误 - 你可能意味着它是List[(Int, String, Float)]
并且意味着在中间元组中有第三个条目。
如果你确实想要一个List[Product]
,你可以通过明确地给出type参数来避免收到警告:
List[Product]((1, "hi", 0.4f), (2, "bye"), (3, "aloha", 7.2f))
答案 1 :(得分:1)
类型注释只是显式指定类型,而不是让它留给类型推理系统来处理。
在这种情况下最简单的例子可以是:
val element = 2
目前推断类型为Int
,如果您希望对指定Byte, Short, Long, Double
等类型进行更多控制,则可以明确将类型指定为:
val element: Double = 2
公共方法也需要类型注释
在这些情况下,类型推断可能会破坏封装,因为它取决于内部方法和类详细信息
(Source)