我认为通过示例更容易展示。
假设我有一个Condition case类,其中一个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
我希望在执行变量类型时访问条件类型,并在执行其中一个方法时访问伴随对象
有没有办法实现这一点并避免此警告(当然,除了重命名伴侣对象之外)?
答案 0 :(得分:2)
到目前为止,我找到的解决方法是这样导入:
import utils.query
[...]
val myCondition: query.Condition
并且警告消失了,但我认为应该有更好的解决方案......
答案 1 :(得分:1)
您描述的不是它的工作方式(或提供完整的样本)。
这听起来像一个陈旧的编译环境。包装对象是否涉及任何一点?做一个干净的编译,重启任何常驻编译器,并在早上给我们打电话。
例如,import子句导入p。{x => y}重命名termname p.x到termname y,类型名称p.x到类型名y。 (SLS 4.7)
但是围绕案例类及其同伴的交叉代码有一个很大的评论,其中包括这个十大有趣的评论:
// What exactly this implies and whether this is a sensible way to
// enforce it, I don't know.
我不是说评论对你的案子有任何必要的影响,但这是一条很好的路线。
答案 2 :(得分: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
我重命名了我的主课,警告消失了。