Как получить доступ к перечислениям Java из Scala? - PullRequest
8 голосов
/ 15 июля 2011

Мой Java-класс выглядит следующим образом

public class Test {

    protected enum TestEnum {A, B, C};

    public Test(TestEnum te) {

    }

}

вот мой Scala

class ScalaEnum(myEnum: TestEnum) extends Test(myEnum) {

}

Я получаю следующее сообщение об ошибке

class TestEnum в объекте Test не может бытьдоступ к объекту Test Доступ к защищенному классу TestEnum запрещен, поскольку включение класса ScalaEnum в пакет XXX не является подклассом объекта Test в пакете YYY, где определена цель

Ответы [ 2 ]

2 голосов
/ 24 мая 2012

Как сказали @Alex и @ Jean-Phillipe, это не имеет ничего общего с тем, что вы пытаетесь получить доступ к перечислению, и больше связано с тем, что перечисления внутри класса неявно статичны: см. этот ответ , например.

Это означает, что вы столкнулись с этим ограничением .Изменение TestEnum на общедоступное решение этой проблемы для меня в Scala 2.9.1.

Сказав все это, несмотря на яростные возражения Мартина по поводу удаления ограничения, ваш код работает, как и ожидалось, в Scala 2.10.

0 голосов
/ 15 июля 2011

Звучит так, будто класс enum неявно статичен, потому что Scala называет его «Тест объекта». Попробуйте указать его в конструкторе (например, Test.TestEnum), и, если это не сработает, ослабление видимости для доступа к пакету может.

...