リフレクション
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[HOME>http://www.trance.co.jp/]] > [[技術情報]] > [[Java...
* リフレクション [#xf246616]
** リフレクションとは [#v07ce870]
** 使用方法 [#sa82e111]
*** クラス [#t0d3b4c5]
*** メソッド [#p0a34105]
*** フィールド [#cdefbb86]
** リフレクションを用いた実装 [#o2c23082]
*** Mapに格納されている値からJavaBeansオブジェクトを生成...
- ''説明''
JavaBeansクラスのインスタンス変数名とMapのKeyがマッチする...
//使用例としては、リクエストパラメータのパラメータ名がJav...
// HttpServletRequest request = HTTPリクエストを取得する.
// Person person = new Person();
// person.setName(request.getParameter("name"));
// person.setAge(request.getParameter("age"));
//とせず、
// HttpServletRequest request = HTTPリクエストを取得する.
// Person person = (Person) TaBeanUtils.createBean(Person...
//とすることで、リクエストパラメータからPersonオブジェク...
&color(red){注意};
JavaBeansのインスタンス変数の型とセットする値の型が異なる...
- ''ソース''
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class TaBeanUtils {
/**
* Mapに格納されている値からJavaBeansオブジェクトを生成...
* <pre>
* ■サンプル
* 以下のようなPersonクラスがある場合とする.
* Person.class
* -name:String
* -age:String
* </pre>
* 下記コードでMapに格納されている「name」、「age」の値を
* セットしたPersonオブジェクトが生成される.
* <code>
* Map map = new HashMap();
* map.put("name", "TranceArts");
* map.put("age", "6");
* map.put("test", "test");
* Person person = (Person) createBean(Person.class, ma...
* </code>
*
* @param beanClass Beanのクラス
* @param map Beanにセットする値を保持するMapオブジェクト
* @return Mapに格納されている値からJavaBeansオブジェ...
* @throws Exception JavaBeansオブジェクトの生成に失敗...
*/
public static Object createBean(Class beanClass, Map ma...
// ■POINT 1 ----------------------
Field[] fields = beanClass.getDeclaredFields();
List fieldList = new ArrayList();
for (int i = 0; i < fields.length; i++) {
if (isInstanceValue(fields[i])) {
fieldList.add(fields[i].getName());
}
}
// ■POINT 3 ----------------------
Object bean = beanClass.newInstance();
for (final Iterator iter = fieldList.iterator(); iter....
String fieldName = (String) iter.next();
// ■POINT 4 ----------------------
Field field = bean.getClass().getDeclaredField(fieldN...
Object value = map.get(fieldName);
if (value == null) {
// Beanにセットする値がない
continue;
}
// ■POINT 5 ----------------------
field.setAccessible(true);
// ■POINT 6 ----------------------
field.set(bean, value);
}
return bean;
}
/**
* インスタンス変数であるか?
* @param field フィールド
* @return true インスタンス変数である
* false インスタンス変数でない
*/
private static boolean isInstanceValue(Field field) {
// ■POINT 2 ----------------------
int modifier = field.getModifiers();
return Modifier.isPrivate(modifier) && !Modifier.isSta...
}
}
- ''解説''
-- &color(blue){''POINT 1''}; - ''クラス内の全てのフィー...
JavaBeansのフィールドは、「private」であるため、「Class#g...
|~メソッド|~説明|
|Class#getDeclaredFields()|クラス内の全てのフィールドを取...
|Class#getFields()|クラス内の「public」フィールドを取得す...
&br;
-- &color(blue){''POINT 2''}; - ''フィールドの修飾子を取...
インスタンス変数は「private」であり、フィールドの修飾子を...
|~メソッド|~説明|
|Field#getModifiers()|フィールドの修飾子を取得する|
&br;下記メソッドを使用し、フィールドの修飾子をチェックす...
|~メソッド|~説明|
|Modifier.isPrivate()|修飾子が「private」であるか?|
|Modifier.isStatic()|修飾子が「static」であるか?|
&br;
-- &color(blue){''POINT 3''}; - ''インスタンスを生成する''
下記メソッドを使用し、JavaBeansオブジェクトを生成する。&b...
|~メソッド|~説明|
|Class#newInstances()|インスタンスを生成する。|
&br;
-- &color(blue){''POINT 4''}; - ''指定した名前のフィール...
JavaBeansのフィールドは、「private」であるため、「Class#g...
|~メソッド|~説明|
|Class#getDeclaredField(String)|全てのフィールドから指定...
|Class#getField(String)|「public」フィールドから指定した...
&br;
-- &color(blue){''POINT 5''}; - ''フィールドへのアクセス...
アクセスフラグを「true」にし、フィールドへのアクセスを許...
-- &color(blue){''POINT 6''}; - ''フィールドに値をセット...
下記メソッドを使用し、JavaBeansオブジェクトのフィールドに...
|~メソッド|~説明|
|Field#set(Object, Object)|オブジェクトの自身のフィールド...
終了行:
[[HOME>http://www.trance.co.jp/]] > [[技術情報]] > [[Java...
* リフレクション [#xf246616]
** リフレクションとは [#v07ce870]
** 使用方法 [#sa82e111]
*** クラス [#t0d3b4c5]
*** メソッド [#p0a34105]
*** フィールド [#cdefbb86]
** リフレクションを用いた実装 [#o2c23082]
*** Mapに格納されている値からJavaBeansオブジェクトを生成...
- ''説明''
JavaBeansクラスのインスタンス変数名とMapのKeyがマッチする...
//使用例としては、リクエストパラメータのパラメータ名がJav...
// HttpServletRequest request = HTTPリクエストを取得する.
// Person person = new Person();
// person.setName(request.getParameter("name"));
// person.setAge(request.getParameter("age"));
//とせず、
// HttpServletRequest request = HTTPリクエストを取得する.
// Person person = (Person) TaBeanUtils.createBean(Person...
//とすることで、リクエストパラメータからPersonオブジェク...
&color(red){注意};
JavaBeansのインスタンス変数の型とセットする値の型が異なる...
- ''ソース''
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class TaBeanUtils {
/**
* Mapに格納されている値からJavaBeansオブジェクトを生成...
* <pre>
* ■サンプル
* 以下のようなPersonクラスがある場合とする.
* Person.class
* -name:String
* -age:String
* </pre>
* 下記コードでMapに格納されている「name」、「age」の値を
* セットしたPersonオブジェクトが生成される.
* <code>
* Map map = new HashMap();
* map.put("name", "TranceArts");
* map.put("age", "6");
* map.put("test", "test");
* Person person = (Person) createBean(Person.class, ma...
* </code>
*
* @param beanClass Beanのクラス
* @param map Beanにセットする値を保持するMapオブジェクト
* @return Mapに格納されている値からJavaBeansオブジェ...
* @throws Exception JavaBeansオブジェクトの生成に失敗...
*/
public static Object createBean(Class beanClass, Map ma...
// ■POINT 1 ----------------------
Field[] fields = beanClass.getDeclaredFields();
List fieldList = new ArrayList();
for (int i = 0; i < fields.length; i++) {
if (isInstanceValue(fields[i])) {
fieldList.add(fields[i].getName());
}
}
// ■POINT 3 ----------------------
Object bean = beanClass.newInstance();
for (final Iterator iter = fieldList.iterator(); iter....
String fieldName = (String) iter.next();
// ■POINT 4 ----------------------
Field field = bean.getClass().getDeclaredField(fieldN...
Object value = map.get(fieldName);
if (value == null) {
// Beanにセットする値がない
continue;
}
// ■POINT 5 ----------------------
field.setAccessible(true);
// ■POINT 6 ----------------------
field.set(bean, value);
}
return bean;
}
/**
* インスタンス変数であるか?
* @param field フィールド
* @return true インスタンス変数である
* false インスタンス変数でない
*/
private static boolean isInstanceValue(Field field) {
// ■POINT 2 ----------------------
int modifier = field.getModifiers();
return Modifier.isPrivate(modifier) && !Modifier.isSta...
}
}
- ''解説''
-- &color(blue){''POINT 1''}; - ''クラス内の全てのフィー...
JavaBeansのフィールドは、「private」であるため、「Class#g...
|~メソッド|~説明|
|Class#getDeclaredFields()|クラス内の全てのフィールドを取...
|Class#getFields()|クラス内の「public」フィールドを取得す...
&br;
-- &color(blue){''POINT 2''}; - ''フィールドの修飾子を取...
インスタンス変数は「private」であり、フィールドの修飾子を...
|~メソッド|~説明|
|Field#getModifiers()|フィールドの修飾子を取得する|
&br;下記メソッドを使用し、フィールドの修飾子をチェックす...
|~メソッド|~説明|
|Modifier.isPrivate()|修飾子が「private」であるか?|
|Modifier.isStatic()|修飾子が「static」であるか?|
&br;
-- &color(blue){''POINT 3''}; - ''インスタンスを生成する''
下記メソッドを使用し、JavaBeansオブジェクトを生成する。&b...
|~メソッド|~説明|
|Class#newInstances()|インスタンスを生成する。|
&br;
-- &color(blue){''POINT 4''}; - ''指定した名前のフィール...
JavaBeansのフィールドは、「private」であるため、「Class#g...
|~メソッド|~説明|
|Class#getDeclaredField(String)|全てのフィールドから指定...
|Class#getField(String)|「public」フィールドから指定した...
&br;
-- &color(blue){''POINT 5''}; - ''フィールドへのアクセス...
アクセスフラグを「true」にし、フィールドへのアクセスを許...
-- &color(blue){''POINT 6''}; - ''フィールドに値をセット...
下記メソッドを使用し、JavaBeansオブジェクトのフィールドに...
|~メソッド|~説明|
|Field#set(Object, Object)|オブジェクトの自身のフィールド...
ページ名: