在Scala中抑制“参数化重载隐式方法在视图边界中不可见”警告

时间:2011-07-04 07:37:21

标签: scala

是否可以使用@SuppressWarnings(???)来抑制此特定警告? (我不打算将此转换用作视图绑定,因此警告无效。)

2 个答案:

答案 0 :(得分:6)

不幸的是没有。编译器忽略@SuppressWarnings。另请参阅this question

答案 1 :(得分:1)

虽然您无法通过@SuppressWarnings禁止此警告,但您可以简单地重命名编译器发出警告的重载之一。如果您不想重命名它,因为它也被明确地调用,请使该方法非隐式,并添加另一个(命名不同的)隐式转换,转换为前者。

换句话说,你应该通过例子来解决这个问题:

class MyClass
object MyClass {
   implicit def myConv: MyClass = error("TODO")
   implicit def myConv[X](value: X): MyClass = error("TODO")
}

进入这个:

class MyClass
object MyClass {
   implicit def myConv: MyClass = error("TODO")
   def myConv[X](value: X): MyClass = error("TODO") // made it non implicit
   implicit def myConv2[X](value: X): MyClass = myConv( value ) // renamed so that it is not an overload anymore
}

请注意,警告仅在scala 2.9.x中发出,默认情况下不再在scala 2.10中发出(但警告所讨论的实际问题仍然存在 - 警告消息仅被删除,因为它是因类型等级使用量激增而被视为过于嘈杂。)