16

groovyのプロパティは、アクセス修飾子のないJavaのクラスフィールドのように見えます。本当?または、特別な意味があります。プロパティをプライベートにする方法はないようですか?

4

2 に答える 2

25

Groovy クラス定義がアクセス修飾子なしでフィールドを宣言すると、パブリック セッター/ゲッター メソッドのペアとプライベート インスタンス変数フィールドが生成されます。これは、 JavaBeans 仕様に従って「プロパティ」とも呼ばれます。

class A {
    String property

    /* 
         private String property

         public void setProperty(String property) { ... }
         public String getProperty() { ... }
    */
}

public インスタンス変数フィールドを宣言すると、setter/getter メソッドのペアなしで public フィールドを取得するだけです。

class A {
    public String field

    /* 
         public String field
    */
}

Groovy クライアントの pov から、実行時に Groovy プロパティと public フィールドにアクセスすることに違いはありません

def a = new A()
println a.field
println a.property

ただしa.field、インスタンス変数に直接アクセスしてa.property実際に呼び出しますa.getProperty()(またはa.setProperty(...)値を割り当てるとき)。ただし、プロパティは JavaBeans 仕様に準拠しているため、クラスは Java ベースの環境でシームレスに使用できます。

「私有財産」を作ることにあまり意味がありません。privateメソッドまたはインスタンス/クラス変数の使用をホスティング クラス タイプに制限します。しかし、プライベート フィールド インスタンス変数の作成について言及していたのかもしれません。

于 2012-11-05T07:06:53.513 に答える
5

通常、プロパティはフィールドのように扱うことができますが、実際には暗黙の getter/setter によってサポートされているため、フィールドのように参照したり、値と等しく設定したりできます。舞台裏では、ゲッター/セッターを使用しています (必要に応じて再定義できます)。

このページには、プロパティ/フィールドとアクセス修飾子の詳細が記載されています (特に「プロパティとフィールドの規則」セクションを参照してください): https://groovy-lang.org/objectorientation.html#_fields_and_properties

また、プライベート プロパティ (プライベート ゲッター/セッターに基づくプライベート フィールド) を作成できることも示されていますが、ゲッター/セッターを明示的に定義する必要があります。

于 2012-11-05T04:07:28.267 に答える