class A {
private def sayHello() {
println "Anish"
}
}
def a_obj = new A()
a_obj.sayHello()
вывод: Anish
Есть ли способ защитить sayHello()
в groovy или я что-то упустил?
class A {
private def sayHello() {
println "Anish"
}
}
def a_obj = new A()
a_obj.sayHello()
вывод: Anish
Есть ли способ защитить sayHello()
в groovy или я что-то упустил?
В системе отслеживания проблем Groovy есть дефект, и этот дефект все еще открыт.
Поиск [groovy] private
показывает:
приватный метод groovy call в суперклассе Java
Что означает "частный" в Groovy?
Как определить частный метод получения в Groovy Bean?
Неясно, является ли это ошибкой или намеренно, но в Groovy 2.0 на это снова обратят внимание.
Вы можете использовать замыкания для достижения аналогичного эффекта, в основном так же, как вы бы скрывали информацию с помощью 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')
}
}
Я думаю, что это ошибка в groovy, которая исправлена в groovy++.
https://issues.apache.org/jira/browse/GROOVY-1875
Как упоминалось в других сообщениях, это может быть ошибка в Groovy. Я придерживаюсь простого соглашения о префиксе имен частных членов с подчеркиванием в начале (аналогично Python), чтобы обозначить, что это частное, что помогает мне понять с точки зрения клиентской стороны, что я должен вызывать.