groovy中的私有方法不是私有的

时间:2011-10-21 16:24:12

标签: groovy private private-members

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

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

输出:Anish

有没有办法在常规中保护sayHello()或者我遗失了什么?

5 个答案:

答案 0 :(得分:18)

在Groovy问题跟踪系统中有defect,该缺陷仍然存在。

答案 1 :(得分:9)

搜索[groovy] private显示:

groovy call private method in Java super class

What does 'private' mean in Groovy?

How to define private getter method in Groovy Bean?

目前尚不清楚它是否是一个bug或设计,但它将在Groovy 2.0中重新审视

答案 2 :(得分:7)

您可以使用闭包来实现类似的效果,基本上与使用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 :(得分:3)

我认为它是groovy中的一个错误,在groovy ++中修复。

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

答案 4 :(得分:1)

正如其他帖子所提到的,这可能是Groovy中的一个错误。我一直坚持使用前导下划线(类似于Python)为私有成员名称添加前缀的简单约定,以表示它是私有的,这有助于我从客户端角度理解我应该调用什么。< / p>