** クラスに存在するフィールド、メソッド名を取得する [#r374fa5d] #setlinebreak(on); package example; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * クラスに存在するフィールド及びメソッドを取得する * (親クラスから継承したフィールド、メソッドを含む) * * @author D.Magata */ public class GetClassAttributes { /** * メイン処理 */ public static void main(String[] args){ String targetClassName = "example.ClassChild"; Class targetClass = null; try { targetClass = Class.forName(targetClassName); } catch (ClassNotFoundException e) { System.out.println("指定されたクラス("+targetClassName+")が存在しません。"); System.exit(1); } System.out.println("【" + targetClassName + "のフィールド、及びGetter 】"); System.out.println(" ----------------------+---------------------"); System.out.println(" フィールド名 | Getter名"); System.out.println(" ----------------------+---------------------"); Map map = getFields(targetClass); Iterator it = map.keySet().iterator(); while (it.hasNext()) { String fieldName = (String)it.next(); String methodName = (String)map.get(fieldName); fieldName = fieldName + repeatString(" " , 20 - fieldName.length()); System.out.println(" " + fieldName + " | " + methodName); } } /** * クラスに存在するフィールド名、Getter名を取得する * @param cls * @return Map<フィールド名, Getter名> */ public static Map<String, String> getFields(Class cls){ Map<String, String> fieldMap = new HashMap<String, String>(); Field[] fields = cls.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { String fieldName = fields[i].getName(); String getterName = getGetterName(cls, fieldName); fieldMap.put(fieldName, getterName); } Class parCls = cls.getSuperclass(); if (parCls != null){ Map<String, String> parFieldMap = getFields(parCls); Iterator it = parFieldMap.keySet().iterator(); while (it.hasNext()){ String fieldName = (String)it.next(); String methodName = (String)parFieldMap.get(fieldName); fieldMap.put(fieldName, methodName); } } return fieldMap; } /** * クラスのフィールド名に対応するGetter名を取得する * @param cls * @param fieldName * @return Getter名 */ public static String getGetterName(Class cls, String fieldName){ String methodName = null; String getterName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); try { Method method = cls.getDeclaredMethod(getterName, new Class[]{}); methodName = method.getName(); } catch (Exception e) { } return methodName; } /** * 文字列を指定回数分繰り返した文字列を返す(結果整形用) */ public static String repeatString(String str, int cnt){ String allString = ""; for (int i = 0; i< cnt; i++){ allString = allString + str; } return allString; } }