Private method in groovy is not private

后端 未结 5 2073
慢半拍i
慢半拍i 2020-12-18 19:12
class A {
    private def sayHello() {
       println \"Anish\"
    } 
 }

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

output : Anish

相关标签:
5条回答
  • 2020-12-18 19:19

    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

    0 讨论(0)
  • 2020-12-18 19:27

    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')
    
        }
    }
    
    0 讨论(0)
  • 2020-12-18 19:36

    There is defect on that in Groovy issue tracking system and that defect is still open.

    0 讨论(0)
  • 2020-12-18 19:37

    I think its a bug in groovy that is fixed in groovy++.

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

    0 讨论(0)
  • 2020-12-18 19:43

    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.

    0 讨论(0)
提交回复
热议问题