groovyのプロパティは、アクセス修飾子のないJavaのクラスフィールドのように見えます。本当?または、特別な意味があります。プロパティをプライベートにする方法はないようですか?
2 に答える
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
メソッドまたはインスタンス/クラス変数の使用をホスティング クラス タイプに制限します。しかし、プライベート フィールド インスタンス変数の作成について言及していたのかもしれません。
通常、プロパティはフィールドのように扱うことができますが、実際には暗黙の getter/setter によってサポートされているため、フィールドのように参照したり、値と等しく設定したりできます。舞台裏では、ゲッター/セッターを使用しています (必要に応じて再定義できます)。
このページには、プロパティ/フィールドとアクセス修飾子の詳細が記載されています (特に「プロパティとフィールドの規則」セクションを参照してください): https://groovy-lang.org/objectorientation.html#_fields_and_properties
また、プライベート プロパティ (プライベート ゲッター/セッターに基づくプライベート フィールド) を作成できることも示されていますが、ゲッター/セッターを明示的に定義する必要があります。