Частный метод в Groovy не является частным - PullRequest
15 голосов
/ 21 октября 2011
class A {
    private def sayHello() {
       println "Anish"
    } 
 }

 def a_obj = new A()
 a_obj.sayHello()

вывод: Anish

Есть ли способ защитить sayHello() в Groovy или я что-то упустил?

Ответы [ 5 ]

18 голосов
/ 21 октября 2011

В системе отслеживания ошибок Groovy есть дефект , и этот дефект все еще открыт.

9 голосов
/ 21 октября 2011

При поиске [groovy] private выявляется:

приватный метод groovy для вызова в суперклассе Java

Что означает «приватный» в Groovy?

Как определить частный метод получения в Groovy Bean?

Неясно, является ли это ошибкой или разработкой, но на нее еще раз посмотрятв Groovy 2.0

7 голосов
/ 20 ноября 2012

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

package test

class FunctionTests {

    def privilagedObj = {

        def privVar = 'foo'

        def privateFunc = { x -> println "${privVar} ${x}"}

        return {x -> privateFunc(x) } 
    }

    public static void main(String[] args) {

        def test = new FunctionTests().privilagedObj()

        test('bar')

    }
}
3 голосов
/ 21 октября 2011

Я думаю, это ошибка в groovy, которая исправлена ​​в groovy ++.

http://jira.codehaus.org/browse/GROOVY-1875

1 голос
/ 01 февраля 2017

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

...