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

変数の型を宣言するときに条件型にアクセスし、そのメソッドの 1 つを実行するときにコンパニオン オブジェクトにアクセスしたい

これを達成し、この警告を回避する方法はありますか (もちろん、コンパニオン オブジェクトの名前を変更する以外に)?

4

3 に答える 3

2

これまでのところ、私が見つけた回避策は次のようにインポートすることです:

import utils.query

[...]

val myCondition: query.Condition

警告は消えましたが、もっと良い解決策があるはずです...

于 2012-09-10T17:35:31.600 に答える
1

あなたが説明することは、それが機能する方法ではありません(または完全なサンプルを提供します)。

古いコンパイル環境のように聞こえます。パッケージオブジェクトはいつでも関与していましたか?クリーンコンパイルを実行し、常駐コンパイラを再起動して、午前中に電話してください。

たとえば、import句importp。{x=> y}は、用語名pxの名前を用語名yに変更し、タイプ名pxの名前をタイプ名yに変更します。(SLS 4.7)

しかし、ケースクラスとそのコンパニオンの共通部分の周りのコードには、このトップ10の楽しいコメントを含む大きなコメントがあります。

 // 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のメインクラスがあり、次の方法でメインクラスにjettyサーバーを作成していました。

     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 に答える