Частный метод в groovy не является частным

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

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

вывод: Anish

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


person anish    schedule 21.10.2011    source источник
comment
возможный дубликат Что означает "частный" в Groovy?   -  person Andrey Adamovich    schedule 21.10.2011


Ответы (5)


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

person Andrey Adamovich    schedule 21.10.2011

Поиск [groovy] private показывает:

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

Что означает "частный" в Groovy?

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

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

person tim_yates    schedule 21.10.2011
comment
Такое же поведение и в Groovy 2.0. - person ; 28.12.2013
comment
@kadaj теперь планируется рассмотреть для groovy 3 ;-) - person tim_yates; 28.12.2013

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

    }
}
person Jason    schedule 20.11.2012

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

https://issues.apache.org/jira/browse/GROOVY-1875

person hvgotcodes    schedule 21.10.2011

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

person solstice333    schedule 01.02.2017