У меня есть следующий SCALA пример:Метод доступа внутренний класс с «отлично» синтаксис в Java с помощью Scala класс & объект
class Nested {}
object Nested {
class Inner {}
object Inner {
def x = 321
}
}
с помощью теста JUnit для тестирования специально, что я могу сделать Nested.Inner.x()
и вызывать метод свободно без Nested.Inner$.MODULE$.x()
:
import static junit.framework.Assert.*;
import org.junit.Test;
public class TestFromJava {
@Test
public void accessTest() {
assertEquals(321, Nested.Inner.x());
}
}
компилируется, но в момент запуска теста, я получаю (sbt test
):
[error] TestFromJava.java:8: cannot find symbol
[error] symbol: method x()
[error] location: class Nested.Inner
[error] Nested.Inner.x
Как я могу извлечь выгоду из синтаксиса Scala и не использовать ужасные $? Возможно, это особенность языка, поскольку он генерирует экземпляры object
.
Что вы имеете в виду «это компилирует»? Это ошибка времени выполнения, которую вы показываете? Похоже, вы используете sbt. Удалось ли запустить 'sbt test: compile'? Я думаю, вам в значительной степени нужно получить доступ к этому символу через 'Nested.Inner $ .MODULE $ .x()' –
Компиляция означает, что 'sbt clean compile' преуспевает. –
Но где «TestFromJava», это основные источники или источники тестов? Это в 'src/main/java' или' src/test/java' (если у вас есть сборка sbt - можете ли вы это подтвердить?). 'compile' не скомпилирует тестовые источники, для компиляции компилируется. Вам нужно запустить 'test: compile'. –