_class A {
private def sayHello() {
println "Anish"
}
}
def a_obj = new A()
a_obj.sayHello()
_
出力:Anish
GroovyでsayHello()
を保護する方法はありますか、それとも何かが足りませんか?
Groovyの問題追跡システムには defect があり、その欠陥はまだ開いています。
探している [groovy] private
明らかにする:
GroovyはJavaスーパークラス でプライベートメソッドを呼び出します
Groovy Beanでプライベートゲッターメソッドを定義する方法は?
それがバグなのか設計によるものなのかは明らかではありませんが、Groovy2.0で再び検討される予定です。
基本的に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')
}
}
Groovy ++で修正されたgroovyのバグだと思います。
他の投稿で言及されているように、これはGroovyのバグである可能性があります。私は、プライベートメンバー名の前に先頭のアンダースコア(Pythonと同様)を付けるという単純な規則に固執しており、プライベートであることを示しています。これは、クライアント側の観点から、何を呼び出すべきかを理解するのに役立ちます。