Это не работает должным образом (поскольку я пытаюсь вызвать закрытый run
пакет Services
):
object Services {
class HelloPrinter {
private[Services] def run = "Hello"
}
}
val obj = new Services.HelloPrinter
Но, что удивительно, это работает:
val obj: {def run: String} = new Services.HelloPrinter
obj.run
Я бы сказал, что это ошибка в компиляторе, так как HelloPrinter не соответствует структурному типу из-за правил видимости пакета, он не должен компилироваться вообще!
Вот пример, когда программа компилируется, но она выдает исключение во время выполнения (java.lang.NoSuchMethodException
):
class HelloPrinter {
private[HelloPrinter] def run = "Hello"
}
val obj: {def run: String} = new HelloPrinter
obj.run
Является ли это языковой функцией или правилом, которое у меня отсутствует или законно ошибка в Scala?