2012-05-05 6 views
0

ここで問題:コンパイル済みのスカラコードを含むjarファイルがあります。瓶に私は両方が正当なJavaクラスですIntellijのアイデアはドルを含むクラスを解決することができません

Step.class ステップの$ class.class

を参照してください。

しかし、Intellij Idea Javaプロジェクトでステップ$ classを使用しようとすると、「シンボル$$を解決できません」というメッセージが表示されます。しかし、コードはmavenでコンパイルされるので、問題はIDEにあると仮定します。

+0

私は11.0 intellij-ideaを使用します。 – Vladimir

+0

その場合、バグが疑われる場合は11.1.1を試してみます。 –

+0

11.1.1と同じですが、すべての$ containigクラスは無視されます。 – Vladimir

答えて

0

アップ、愚かな私、すべてのキャッシュを無効にして、ジャーを再インポートしました。これで解決しました。

1

Javaインタフェースとは異なり、Scalaの特性には実装が含まれることがあります。 IntelliJのScalaのプラグインは、Javaコードに実装クラスを公開していません

~/code/scratch/20120505 cat trait.scala 
package test 

trait T { 
    def a = println("foo") 
} 
    ~/code/scratch/20120505 scalac210 -d . trait.scala 

    ~/code/scratch/20120505 javap -classpath . test/T 
Compiled from "trait.scala" 
public interface test.T extends scala.ScalaObject{ 
    public abstract void a(); 
} 

    ~/code/scratch/20120505 javap -classpath . test/T\$class 
Compiled from "trait.scala" 
public abstract class test.T$class extends java.lang.Object{ 
    public static void a(test.T); 
    public static void $init$(test.T); 
} 

scalacは、インタフェースと実装クラスにこれをコンパイルします。 Scalaコンパイラの実装の詳細に頼っているので、これを直接使うのは良い考えではありません。

形質のサブクラスで対応するメソッドを呼び出す必要があります。あなたはScalaでそれを書かなければならないでしょう。

詳細情報:How are Scala traits compiled into Java bytecode?

関連する問題