web-dev-qa-db-ja.com

groovyのプライベートメソッドはプライベートではありません

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

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

出力:Anish

GroovyでsayHello()を保護する方法はありますか、それとも何かが足りませんか?

20
anish

Groovyの問題追跡システムには defect があり、その欠陥はまだ開いています。

19

探している [groovy] private明らかにする:

GroovyはJavaスーパークラス でプライベートメソッドを呼び出します

Groovyで「private」とはどういう意味ですか?

Groovy Beanでプライベートゲッターメソッドを定義する方法は?

それがバグなのか設計によるものなのかは明らかではありませんが、Groovy2.0で再び検討される予定です。

9
tim_yates

基本的に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')

    }
}
7
Jason

Groovy ++で修正されたgroovyのバグだと思います。

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

3
hvgotcodes

他の投稿で言及されているように、これはGroovyのバグである可能性があります。私は、プライベートメンバー名の前に先頭のアンダースコア(Pythonと同様)を付けるという単純な規則に固執しており、プライベートであることを示しています。これは、クライアント側の観点から、何を呼び出すべきかを理解するのに役立ちます。

1
solstice333