4

Eclipse IDE を使用している場合、Java コードから Scala クラスを参照できません。問題の Scala クラスは、Scala オブジェクト構造内にネストされています。Java コードでクラスを使用しようとすると、Eclipse はバイナリー名の使用について不平を言います。

Inner以下は、目的のクラス ( )を定義する Scala コードの例です。

package mypackage;

object Outer {
  object Middle {
    class Inner {
      def msg() {
        println("Running");
      }
    }
  }
}

Java コードでクラスを使用するInnerには、次のコードを使用します。

mypackage.Outer$Middle$Inner inner = new mypackage.Outer$Middle$Inner();
inner.msg();

ただし、Eclipse (Indigo) コンパイラは、最初の行に次のメッセージを表示します。

ネストされたタイプ mypackage.Outer$Middle$Inner は、バイナリ名を使用して参照できません

興味深いことに、上記の Java コードは、NetBeans 6.9.1 で使用すると機能します。

これは Eclipse コンパイラの問題ですか? バイナリ名の使用を許可するフラグはありますか? あるいは、これは Scala の問題なのか、それとも私の使用方法の問題なのか?

4

1 に答える 1

1

深くネストされたオブジェクトには、Java からアクセスできません。Eclipse、コマンドライン、またはビルドツールからも。バイトコード変換では、ネスト情報が失われます。

$Eclipse では名前を使用できないため、エラーが発生します。Java の相互運用性に関心がある場合は、境界で Java のような Scala に固執する必要があります。トップレベル クラス、純粋なトレイトまたは抽象クラス、高次メソッドなしなど。

于 2012-04-20T12:59:11.263 に答える