Как отключить автоматически генерируемые аксессоры / мутаторы в Groovy? - PullRequest
0 голосов
/ 06 февраля 2019

Проблема

Кажется, что независимо от того, определите ли вы поле как общедоступное или частное, Groovy сделает его общедоступным через автоматически созданный метод доступа.Здесь есть несколько сообщений, которые предполагают, что это происходит, только если ваше поле не объявлено закрытымЯ могу говорить за каждую версию, но за Groovy 2.5, и я подозреваю, что выше, это определенно не так.

Пример

private Collection<BeanDefinition> unknownLocalBeans = new HashSet()

Переменная unkwownLocalBeans доступна всем, несмотря на то, что я не хочу, чтобы кто-то имел к ней доступ, в том числе через метод получения.

Вопрос

Есть ли способ получить фактический частный доступ в Groovy или отключить функцию автоматической генерации?У меня есть классы, у которых НЕ должно быть средств доступа, и наличие их предлагает разработчикам делать то, что им не следует.

1 Ответ

0 голосов
/ 08 февраля 2019

Тот факт, что вы можете получить доступ к закрытым членам в Groovy, не имеет ничего общего с автоматически генерируемыми средствами доступа.Официально, возможность доступа к закрытым членам является ошибкой в ​​реализации Groovy, то есть в спецификации языка Groovy нет ничего.это говорит о том, что вы должны иметь доступ к закрытым членам.

Однако эта ошибка существует так долго, что практически признается де-факто.Вероятность того, что эта ошибка когда-либо будет исправлена, очень мала, потому что есть много программ, которые полагаются на возможность доступа к закрытым членам, которые сломались бы, если бы они были исправлены.

Лично я думаю, что это позорчто нет способа инкапсулировать данные в классе, но другие не согласны с этим и считают, что возможность доступа к закрытым членам полезна, например, при написании тестов.

Возможно, вы не можете получить доступ к закрытым членам аннотированного класса.с @CompileStatic, но эта аннотация вводит некоторые ограничения, которые вам могут не понравиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...