11

モデリングツールによって生成されたJavaクラスに暗黙の変換を追加したいと思います。そこで、それらをそれらのクラスのコンパニオンオブジェクトに追加して、コンパイラが自動的にそれらを検出できるようにします。ただし、コンパニオンは同じファイルで定義する必要があるため、別のファイルに追加することはできません。これについて私にできることはありますか?

もちろん、すべての暗黙的な変換を別のオブジェクトで定義してからスコープに入れることもできますが、これには追加のインポートが必要です。他の解決策はありますか?

4

2 に答える 2

9

もちろん、独自のコンパニオンオブジェクトを定義することもできます。これは、私がプロジェクト固有のPredefような配置で行うことがよくあります。例えば:

object domain {

  type TimeUnit = java.util.concurrent.TimeUnit
  object TimeUnit {
    def valueOf(s : String) = java.util.concurrent.TimeUnit.valueOf(str)
    val Millis = java.util.concurrent.TimeUnit.MILLISECONDS
    //etc
  }

次に、これを使用できます。

import my.domain._
val tu : TimeUnit = TimeUnit.valueOf("MILLISECONDS")

しかし、あなたdomain.TimeUnitはモジュール(つまりscala object)です

于 2011-02-07T15:01:43.397 に答える
9

現在のScalaコンパイラでは、コンパニオンオブジェクトを同じファイルに配置する以外に、コンパニオンオブジェクトを定義する方法はありません。あなたができる最善のことは、同じパッケージと名前を持ち、追加のインポートを持つ非コンパニオンオブジェクトです。

カプセル化についての仮定を破ることなく事後の交際を作成する良い方法を考えることができるなら、それは明らかに非常に便利な機能になるので、http: //groups.google.com/group/scala-debateに投稿してください。

于 2011-02-07T16:05:52.403 に答える