【问题标题】:Private method in groovy is not privategroovy 中的私有方法不是私有的
【发布时间】:2011-12-12 17:38:15
【问题描述】:
class A {
    private def sayHello() {
       println "Anish"
    } 
 }

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

输出:Anish

有什么方法可以在 groovy 中保护sayHello() 还是我遗漏了什么?

【问题讨论】:

标签: groovy private private-members


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    搜索[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?

    尚不清楚这是一个错误还是设计使然,但它会在 Groovy 2.0 中再次受到关注

    【讨论】:

    • Groovy 2.0 中的行为也是如此。
    • @kadaj 现在计划在 groovy 3 中查看 ;-)
    【解决方案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')
    
        }
    }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2012-05-06
          • 1970-01-01
          • 2011-02-19
          • 2011-04-29
          • 2010-09-09
          • 1970-01-01
          • 1970-01-01
          • 2014-10-15
          • 2017-05-23
          相关资源
          最近更新 更多