class A {
private def sayHello() {
println "Anish"
}
}
def a_obj = new A()
a_obj.sayHello()
output : Anish
Is there any way to protect sayHello()
in groovy or am I missing something?
class A {
private def sayHello() {
println "Anish"
}
}
def a_obj = new A()
a_obj.sayHello()
output : Anish
Is there any way to protect sayHello()
in groovy or am I missing something?
There is defect on that in Groovy issue tracking system and that defect is still open.
Searching for [groovy] private
reveals:
groovy call private method in Java super class
What does 'private' mean in Groovy?
How to define private getter method in Groovy Bean?
It's not clear if it is a bug or by design, but it is going to get looked at again in Groovy 2.0
You can use closures to achieve a similar effect, basically the same way you would do information hiding with 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')
}
}
I think its a bug in groovy that is fixed in groovy++.
http://jira.codehaus.org/browse/GROOVY-1875
As other posts have mentioned, this may be a bug in Groovy. I've been sticking to a simple convention of prefixing private member names with a leading underscore (similar to Python) to denote that it's private which helps me understand from a client side perspective what I should be calling.