Идея Intellij не может разрешить классы, содержащие доллар

Здесь проблема: у меня есть jar, содержащий скомпилированный код Scala. В банке я вижу

Step.class Шаг $ class.class

которые оба являются законными классами Java.

Однако, когда я пытаюсь использовать класс Step $ в Java-проекте Intellij Idea, он говорит: «Не удается разрешить символ Step $ class». Но код компилируется с помощью maven, поэтому я предполагаю, что проблема в IDE.


person Vladimir    schedule 05.05.2012    source источник
comment
Ага. Кстати, я использую intellij-idea 11.0.   -  person Vladimir    schedule 05.05.2012
comment
В этом случае я бы попробовал 11.1.1, если вы подозреваете, что это ошибка.   -  person Peter Lawrey    schedule 05.05.2012
comment
То же самое для 11.1.1, он просто игнорирует все классы $ containig.   -  person Vladimir    schedule 05.05.2012
comment
Я бы зарегистрировал это как ошибку в Jetbrains, они обычно довольно быстро реагируют, даже если вы используете бесплатную версию. jetbrains.com/support/idea/index.html   -  person Peter Lawrey    schedule 05.05.2012


Ответы (2)


В отличие от интерфейсов Java, трейты Scala могут содержать реализации. scalac компилирует это в интерфейс и класс реализации:

  ~/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);
}

Плагин IntelliJ Scala не предоставляет класс реализации коду Java. На самом деле не рекомендуется использовать это напрямую, поскольку вы полагаетесь на детали реализации компилятора Scala.

Вы должны вызвать соответствующие методы в подклассе признака. Однако вам придется написать это на Scala.

Дополнительная информация: Как черты Scala компилируются в байт-код Java?

person retronym    schedule 05.05.2012

Упс, глупый я, я только что аннулировал все кеши и повторно импортировал банки, теперь это решено.

person Vladimir    schedule 05.05.2012