前回に見たプロパティの取得方法を用いて、今回から、いろいろな Java オブジェクト、Groovy オブジェクトに対してプロパティを取得して見ます。
Java クラス、Groovy クラスではそれぞれ
- Java クラスでは「class」
- Groovy クラスでは「class」、「metaClass」
が常にプロパティとして認識されますが、この関連の記事では無視します。
対象とするオブジェクトの定義
まずはプロパティを取得するオブジェクトの定義。 一応載せてるだけで、別に細かく見る必要はありません。 結果は後で表にまとめています。
Java オブジェクト
Java クラスのフィールドに定義できるスコープは
- public
- デフォルト(指定なし)
- protected
- public
の4つです。 加えて
- final かどうか
- 型が boolean かどうか*1
で分けています。
public class FieldJavaVean { private Object privateField; Object packageField; protected Object protectedField; public Object publicField; //********** Final ********** private final Object privateFinalField = null; final Object packageFinalField = null; protected final Object protectedFinalField = null; public final Object publicFinalField = null; //********** Boolean ********** private boolean privateBooleanField; boolean packageBooleanField; protected boolean protectedBooleanField; public boolean publicBooleanField; //********** Final & Boolean ********** private final boolean privateFinalBooleanField = false; final boolean packageFinalBooleanField = false; protected final boolean protectedFinalBooleanField = false; public final boolean publicFinalBooleanField = false; }
Groovy オブジェクト
Groovy クラスのフィールドに定義できるスコープは
- public
- protected
- public
- property (指定なし)
の4つです。 加えて
- final かどうか
- 型が boolean かどうか
でも分けています。
class FieldGroovyVean { private Object privateField protected Object protectedField public Object publicField Object propertyField // プロパティ! //********** Final ********** private final Object privateFinalField protected final Object protectedFinalField public final Object publicFinalField final Object propertyFinalField // プロパティ! //********** Boolean ********** private boolean privateBooleanField protected boolean protectedBooleanField public boolean publicBooleanField boolean propertyBooleanField // プロパティ! //********** Final & Boolean ********** private final boolean privateFinalBooleanField protected final boolean protectedFinalBooleanField public final boolean publicFinalBooleanField final boolean propertyFinalBooleanField // プロパティ! }
プロパティ
では、「プロパティかどうか」の結果です。
- 「☆」はプロパティとして認識される
- 「×」はプロパティとして認識されない
です。
Java
()内は boolean 型の場合です。 この関連の記事では常にそうします。 Object ( boolean )
スコープ | final or not | GroovyBeans | Inspector | JavaBeans | MetaClass |
---|---|---|---|---|---|
private | - final |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
package | - final |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
protected | - final |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
public | - final |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
Groovy
スコープ | final or not | GroovyBeans | Inspector | JavaBeans | MetaClass |
---|---|---|---|---|---|
private | - final |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
protected | - final |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
public | - final |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
× ( × ) × ( × ) |
property | - final |
☆ ( ☆ ) ☆ ( ☆ ) |
☆ ( ☆ ) ☆ ( ☆ ) |
☆ ( ☆ ) ☆ ( ☆ ) |
☆ ( ☆ ) ☆ ( ☆ ) |
まとめ
フィールドを定義した場合、Groovy のアクセス修飾子なし(プロパティ・スコープというのかな?)の場合にだけプロパティとして認識されます。
*1:boolean 型を別に見ているのは、boolean 型のプロパティのアクセッサ (getter) メソッドが isXxxx() となるためです。 今回は関係ありませんが、メソッド定義の時に分けて見ていくので、一貫性のため今回も分けています。