前回に続き、今回はメソッドが定義されている Java オブジェクト、Groovy オブジェクトに対してプロパティを取得して見ます。
対象とするオブジェクトの定義
プロパティを取得するオブジェクトの定義。
Java オブジェクト
Java クラスのメソッドに定義できるスコープも
- public
- デフォルト(指定なし)
- protected
- public
の4つです。 加えて、プロパティの型が boolean の場合はアクセッサ (getter) メソッドが isXxxx() となっている場合も考えます。 また、
- アクセッサ (getter) メソッドのみの場合 (ReadOnly)
- ミューテータ (setter) メソッドのみの場合 (WriteOnly)
でも分けています。
public class JavaVean { //********** Object ********** private Object getPrivate(){return null;} private void setPrivate(Object value){} Object getPackage(){return null;} void setPackage(Object value){} protected Object getProtected(){return null;} protected void setProtected(Object value){} public Object getPublic(){return null;} public void setPublic(Object value){} //********** Boolean ********** private boolean isPrivateBoolean(){return false;} private void setPrivateBoolean(Object value){} boolean isPackageBoolean(){return false;} void setPackageBoolean(Object value){} protected boolean isProtectedBoolean(){return false;} protected void setProtectedBoolean(Object value){} public boolean isPublicBoolean(){return false;} public void setPublicBoolean(Object value){} //********** Read Only ********** private Object getPrivateReadOnly(){return null;} Object getPackageReadOnly(){return null;} protected Object getProtectedReadOnly(){return null;} public Object getPublicReadOnly(){return null;} private boolean isPrivateReadOnly(){return false;} boolean isPackageReadOnly(){return false;} protected boolean isProtectedReadOnly(){return false;} public boolean isPublicReadOnly(){return false;} //********** Write Only ********** private void setPrivateWriteOnly(Object value){} void setPackageWriteOnly(Object value){} protected void setProtectedWriteOnly(Object value){} public void setPublicWriteOnly(Object value){} }
Groovy オブジェクト
Groovy クラスのメソッドに定義できるスコープは
- public
- protected
- public (指定なし)
の3つです。 あとは Java オブジェクトの場合と同じです。
class GroovyVean { //********** Object ********** private Object getPrivate(){null} private void setPrivate(value){} protected Object getProtected(){null} protected void setProtected(value){} Object getPublic(){null} void setPublic(value){} //********** Boolean ********** private boolean isPrivateBoolean(){null} private void setPrivateBoolean(value){} protected boolean isProtectedBoolean(){null} protected void setProtectedBoolean(value){} boolean isPublicBoolean(){null} void setPublicBoolean(value){} //********** Read Only ********** private Object getPrivateReadOnly(){null} protected Object getProtectedReadOnly(){null} Object getPublicReadOnly(){null} private boolean isPrivateReadOnly(){false} protected boolean isProtectedReadOnly(){false} boolean isPublicReadOnly(){false} //********** Write Only ********** private void setPrivateWriteOnly(value){} protected void setProtectedWriteOnly(value){} void setPublicWriteOnly(value){} }
プロパティ
では、「プロパティかどうか」の結果です。
- 「☆」はプロパティとして認識される
- 「×」はプロパティとして認識されない
です。
Java
()内は boolean 型の場合です。 この関連の記事では常にそうします。 Object ( boolean )
スコープ | Read/Write | GroovyBeans | Inspector | JavaBeans | MetaClass |
---|---|---|---|---|---|
private | Read/Write Read Only Write Only |
☆ ( × ) ☆ ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
× ( × ) × ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
package | Read/Write Read Only Write Only |
☆ ( × ) ☆ ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
× ( × ) × ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
protected | Read/Write Read Only Write Only |
☆ ( × ) ☆ ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
× ( × ) × ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
public | Read/Write Read Only Write Only |
☆ ( ☆ ) ☆ ( ☆ ) × |
☆ ( ☆ ) ☆ ( ☆ ) ☆ |
☆ ( ☆ ) ☆ ( ☆ ) ☆ |
☆ ( ☆ ) ☆ ( ☆ ) ☆ |
Groovy
スコープ | Read/Write | GroovyBeans | Inspector | JavaBeans | MetaClass |
---|---|---|---|---|---|
private | Read/Write Read Only Write Only |
☆ ( × ) ☆ ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
× ( × ) × ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
protected | Read/Write Read Only Write Only |
☆ ( × ) ☆ ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
× ( × ) × ( × ) × |
☆ ( ☆ ) ☆ ( × ) ☆ |
public | Read/Write Read Only Write Only |
☆ ( ☆ ) ☆ ( ☆ ) × |
☆ ( ☆ ) ☆ ( ☆ ) ☆ |
☆ ( ☆ ) ☆ ( ☆ ) ☆ |
☆ ( ☆ ) ☆ ( ☆ ) ☆ |
まとめ
JavaBeans のプロパティはアクセス修飾子が public でないと不可。
その他の Groovy 関連のプロパティはアクセス修飾子は関係なし(少なくともプロパティ情報を取得する分には。 メソッド実行時に例外が発生したりするかも知れませんが、試してません。)
また、public でないものでは isXxxx() のような boolean のアクセッサは認識されないものが多いようです。 とりえあえず、少なくとも public なアクセッサ (getter) メソッドがあればプロパティとして認識されると思っておけば間違いないかな。
「Inspector」によるプロパティと「MetaClass」によるプロパティは同じ。 Java オブジェクトと Groovy オブジェクトも同じと扱われるようですね。 まぁ、それは Groovy のコンセプトの1つではありますが。
- 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 146回
- この商品を含むブログ (121件) を見る
Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集
- 作者: Timothy M. O'Brien,長瀬嘉秀(監訳),株式会社テクノロジックアート
- 出版社/メーカー: オライリージャパン
- 発売日: 2005/08/20
- メディア: 大型本
- 購入: 2人 クリック: 38回
- この商品を含むブログ (38件) を見る