отличные языковые ошибки - PullRequest
2 голосов
/ 11 ноября 2009

В консоли Groovy следующий код выполняется без ошибок:

class F {
  private def getFoo() {"foo"}
  private def barValue = "bar"
}

def f = new F()
assert f.barValue == "bar"
assert f.properties.containsKey("foo")

Это означает, что:

  • Можно получить доступ к закрытым членам классов вне класса
  • Свойства класса получены из закрытых (и общедоступных) методов получения / установки

Мне кажется, что оба они являются чрезвычайно серьезными языковыми ошибками. Хотя мне действительно нравится Groovy, я нахожу невероятным, что язык, который существовал достаточно долго, не реализовал чего-то столь фундаментального, как концепция конфиденциальности правильно.

Это действительно ошибки или я что-то упустил?

Спасибо, Дон

1 Ответ

4 голосов
/ 11 ноября 2009

Это намеренно, к сожалению. Это изменилось с 1,5. К сожалению, для поддержки их механизма замыканий и протокола мета-объектов им необходимо иметь доступ к закрытым членам.

Эта статья объясняет немного более подробно: http://www.benjaminbooth.com/tableorbooth/2008/07/groovy-15-no-private-for-you.html

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