5

我认为这更容易用一个例子来展示。

假设我有一个 Condition 案例类,其中有一个 Condition 伴随对象,用于提供替代构造函数,如下所示:

case class Condition(
  field: String, 
  values: List[String])
}

object Condition {
  def apply(field: String, value: String): Condition = {
    Condition(field, List(value))
  }
}

当我从另一个导入它时,我收到以下警告(最终变成错误):

import utils.query.Condition 

[warn] [...]/ConditionBuilder.scala:14: imported `Condition' is permanently hidden by definition of object Condition in package query
[warn] import utils.query.Condition
[warn]        ^
[warn] one warning found

我想在声明变量的类型时访问条件类型,并在执行其中一个方法时访问伴随对象

有什么方法可以实现这一点并避免这个警告(当然,除了重命名伴生对象)?

4

3 回答 3

2

到目前为止,我发现的解决方法是这样导入的:

import utils.query

[...]

val myCondition: query.Condition

警告消失了,但我认为应该有更好的解决方案......

于 2012-09-10T17:35:31.600 回答
1

您所描述的不是它的工作方式(或提供完整的示例)。

这听起来像是一个陈旧的编译环境。是否在任何时候都涉及到包对象?做一个干净的编译,重新启动任何常驻编译器,然后在早上给我们打电话。

例如,导入子句 import p.{x => y } 将术语名 px 重命名为术语名 y,将类型名 px 重命名为类型名 y。(SLS 4.7)

但是在代码中围绕案例类及其同伴的交集有一个很大的注释,其中包括这个十大有趣的注释:

 // What exactly this implies and whether this is a sensible way to
 // enforce it, I don't know.

我并不是说该评论对您的案件有任何必要的影响,但这是一条很好的路线。

于 2012-09-11T06:13:23.090 回答
0

我有一个带有名称的主类,Server我正在通过以下方式在主类中创建一个码头服务器:

     import org.eclipse.jetty.server.Server

     var server:Server=new Server()

我在运行时收到以下警告sbt run

    [warn] /home/xxx/xxx/xxx/src/main/scala/com/xxx/xxx/main/Server.scala:3: imported `Server' is permanently hidden by definition of object Server in package main
    [warn] import org.eclipse.jetty.server.Server
    [warn]                                 ^
    [warn] one warning found

我重命名了我的主类,警告消失了。

于 2016-05-10T07:47:09.570 回答