Частный метод в groovy не является приватным

class A {
    private def sayHello() {
       println "Anish"
    } 
 }

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

вывод: Anish

Есть ли способ защитить sayHello() в groovy или мне что-то не хватает?

Ответ 1

Существует дефект в системе отслеживания проблем Groovy, и этот дефект все еще открыт.

Ответ 3

Вы можете использовать блокировки для достижения аналогичного эффекта, в основном так же, как и для скрытия информации с помощью 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')

    }
}

Ответ 5

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