/**
  * 指定されたメンバを表示する
  *
  * @param Member[] mems 表示したいメンバ型オブジェクト
  */
 public static void printMembers(Member[] mems) {
   for (Member m : mems) {
     //			if(m.getDeclaringClass() == Object.class){
     //				continue;
     //			}
     String decl = m.toString() + "\r\n";
     display2.append(decl);
   }
   display2.append("\r\n");
 }
 private static Method getMethod(
     Object o, Object[] args, String methodName, Class<?>[] argsArray) {
   Method method = null;
   try {
     method = o.getClass().getMethod(methodName, argsArray);
   } catch (NoSuchMethodException e) {
     try {
       method = o.getClass().getDeclaredMethod(methodName, argsArray);
     } catch (NoSuchMethodException e2) {
       for (int i = 0; i < args.length; i++) {
         // 引数がひとつであれば大丈夫。引数が複数の場合はほぼ無理。一括で引数すべてのスーパークラス取得するので。
         if (args[i].getClass().getSuperclass()
             != null) { // primitive, interface, Objectであればスーパークラスはnull
           argsArray[i] = args[i].getClass().getSuperclass();
         } else { // すべてのインターフェースについてためす。j=0...,その後インターフェースのスーパークラス
           //						if(args[i].getClass().getInterfaces() != null){
           //							Class<?>[] icls = args[i].getClass().getInterfaces();
           //							for(int j = 0; j < icls.length; j++){
           //								argsArray[i] = icls[j];
           //							}
           //						}
         }
         counter++;
         if (counter == 5) {
           message = "NoSuchMethodException\r\n";
           display.append(message);
           return null;
         }
         method = getMethod(o, args, methodName, argsArray);
       }
     }
   }
   return method;
 }
 /**
  * 指定されたクラスのインスタンスを生成する
  *
  * @param Class<?> cls インスタンスを生成したいクラス
  */
 public static Object getInstance(Class<?> cls)
     throws IllegalArgumentException, InstantiationException, IllegalAccessException,
         InvocationTargetException, ClassNotFoundException, SecurityException,
         NoSuchMethodException {
   message = "以下のクラスのインスタンスを生成:" + cls.getName() + "\r\n";
   display.append(message);
   return cls.newInstance();
 }
 public static void setElement(Object[] oArr, Object value, int index) throws Throwable {
   StringBuffer tempMessage = new StringBuffer();
   tempMessage.append(
       "配列に値を代入。 インデックス: " + index + " " + "要素型: " + value.getClass().getName() + "\r\n");
   int size = oArr.length;
   if (index >= 0 && index < size) {
     oArr[index] = (Object) value;
   } else {
     tempMessage.append("インデックスが不正です\r\n");
   }
   message = tempMessage.toString();
   display.append(message);
 }
  /**
   * クラスのオブジェクトを取得する
   *
   * @param String name クラスの名前
   */
  public static Class<?> getClass(String name) {
    StringBuffer tempMessage = new StringBuffer();
    Class<?> cls = null;
    try {
      cls = Class.forName(name);
      tempMessage.append("以下のクラスオブジェクトを取得: " + name + "\r\n");

    } catch (ClassNotFoundException e) {
      e.printStackTrace();
      tempMessage.append("ClassNotFoundException\r\n");
    }
    message = tempMessage.toString();
    display.append(message);
    return cls;
  }
 /**
  * 指定されたクラスのインスタンスを生成する
  *
  * @param Class<?> cls インスタンスを生成したいクラス
  * @param Object... args インスタンス生成に用いるパラメータ
  */
 public static Object getInstance(Class<?> cls, Object... args)
     throws IllegalArgumentException, InstantiationException, IllegalAccessException,
         InvocationTargetException, ClassNotFoundException, SecurityException,
         NoSuchMethodException {
   message = "以下のクラスのインスタンスを生成:" + cls.getName() + "\r\n";
   display.append(message);
   if (args == null) {
     return cls.newInstance();
   } else {
     Class<?>[] argsArray = new Class<?>[args.length];
     Constructor<?> con = null;
     for (int i = 0; i < args.length; i++) {
       System.out.println(args[i]);
       argsArray[i] = getClassObject(args[i]);
     }
     con = cls.getDeclaredConstructor(argsArray);
     return con.newInstance(args);
   }
 }
 public static void printMethods(Class<?> c) {
   display2.append("メソッド\r\n");
   Method[] declaredmethods = c.getDeclaredMethods();
   Method[] methods = c.getMethods();
   ArrayList<Method> methodList = new ArrayList<Method>(methods.length);
   for (int i = 0; i < methods.length; i++) {
     methodList.add(methods[i]);
   }
   for (int i = 0; i < declaredmethods.length; i++) {
     if (!methodList.contains(declaredmethods[i])) {
       methodList.add(declaredmethods[i]);
     }
   }
   Method[] allMethods = new Method[methodList.size()];
   for (int i = 0; i < allMethods.length; i++) {
     allMethods[i] = methodList.get(i);
   }
   printMembers(allMethods);
 }
 public static void printConstructors(Class<?> c) {
   display2.append("コンストラクタ\r\n");
   Constructor[] declaredconstructors = c.getDeclaredConstructors();
   Constructor[] constructors = c.getConstructors();
   ArrayList<Constructor> constructorList = new ArrayList<Constructor>(constructors.length);
   for (int i = 0; i < constructors.length; i++) {
     constructorList.add(constructors[i]);
   }
   for (int i = 0; i < declaredconstructors.length; i++) {
     if (!constructorList.contains(declaredconstructors[i])) {
       constructorList.add(declaredconstructors[i]);
     }
   }
   Constructor[] allConstructors = new Constructor[constructorList.size()];
   for (int i = 0; i < allConstructors.length; i++) {
     allConstructors[i] = constructorList.get(i);
   }
   printMembers(allConstructors);
 }
 public static void printFields(Class<?> c) {
   display2.append("フィールド\r\n");
   Field[] declaredfields = c.getDeclaredFields();
   Field[] fields = c.getFields();
   ArrayList<Field> fieldList = new ArrayList<Field>(fields.length);
   for (int i = 0; i < fields.length; i++) {
     fieldList.add(fields[i]);
   }
   for (int i = 0; i < declaredfields.length; i++) {
     if (!fieldList.contains(declaredfields[i])) {
       fieldList.add(declaredfields[i]);
     }
   }
   Field[] allFields = new Field[fieldList.size()];
   for (int i = 0; i < allFields.length; i++) {
     allFields[i] = fieldList.get(i);
   }
   printMembers(allFields);
 }
示例#10
0
 /**
  * オブジェクトのフィールドに値を設定する
  *
  * @param Object o フィールドに値を設定したいオブジェクト
  * @param String fieldName 値を設定したいフィールドの名前
  * @param Object value フィールドに設定したい値
  */
 public static void setField(Object o, String fieldName, Object value)
     throws SecurityException, NoSuchFieldException, IllegalArgumentException,
         IllegalAccessException {
   Field field;
   try {
     field = o.getClass().getField(fieldName);
   } catch (NoSuchFieldException e) {
     try {
       field = o.getClass().getDeclaredField(fieldName);
     } catch (NoSuchFieldException e1) {
       field = o.getClass().getSuperclass().getField(fieldName);
     }
   }
   if (field.isAccessible() == false) {
     // privateメンバにもアクセス可能になる
     field.setAccessible(true);
   }
   field.set(o, value);
   message = "オブジェクト" + o + "のフィールド" + fieldName + "に値" + value + "をセット\r\n";
   display.append(message);
 }
示例#11
0
 /**
  * ユーザが指定した型とサイズで配列を生成する
  *
  * @param Class<T> type 配列の要素の型
  * @param int size 配列のサイズ
  */
 @SuppressWarnings("unchecked")
 public static <T> T[] toArray(Class<T> type, int size) {
   message = "以下の配列を生成。要素型 " + type.getName() + " " + "サイズ: " + size + "\r\n";
   display.append(message);
   return (T[]) Array.newInstance(type, size);
 }
示例#12
0
  /**
   * オブジェクトのメソッドを呼び出す
   *
   * @param Object o メソッドを呼び出したいオブジェクト
   * @param String methodName 呼び出したいメソッドの名前
   * @param Object... args メソッドのパラメータ
   * @throws NoSuchMethodException
   */
  public static Object invoke(Object o, String methodName, Object... args)
      throws SecurityException, ClassNotFoundException, NoSuchMethodException {
    StringBuffer tempMessage = new StringBuffer();
    Method method = null;

    //		//argsArray:メソッドの引数の型配列
    //		Class<?>[] argsArray = new Class<?>[args.length];
    //		for(int i = 0; i < args.length; i++){
    //			argsArray[i] = getClassObject(args[i]);
    //			//スーパークラスを引数にとれるように修正
    //		}
    //		try {
    //			method = o.getClass().getMethod(methodName, argsArray);
    //		} catch (NoSuchMethodException e) {
    //			try{
    //				method = o.getClass().getDeclaredMethod(methodName, argsArray);
    //			}catch (NoSuchMethodException e2) {
    //					message = "NoSuchMethodException\r\n";
    //					display.append(message);
    //			}
    //		}
    /////////////////////////////////////////
    // argsArray:メソッドの引数の型配列
    Class<?>[] argsArray = new Class<?>[args.length];
    for (int i = 0; i < args.length; i++) {
      argsArray[i] = getClassObject(args[i]);
    }
    method = getMethod(o, args, methodName, argsArray);

    ////////////////////////////////////////
    tempMessage.append("method: " + method.getName() + " is called.\r\n");

    if (Modifier.isPrivate(method.getModifiers())) {
      method.setAccessible(true);
    }
    if (o.equals(null)) {
      if (Modifier.isStatic(method.getModifiers()) == false) {
        throw new NoSuchMethodException();
      }
    }

    try {
      Type returnType = method.getGenericReturnType();
      tempMessage.append("return type: " + returnType.toString() + "\r\n");
      if (returnType.equals(Void.TYPE)) {
        tempMessage.append("return value: " + "なし\r\n");
      } else {
        tempMessage.append("return value: " + method.invoke(o, args).toString() + "\r\n");
      }
      message = tempMessage.toString();
      display.append(message);
      return method.invoke(o, args);
    } catch (IllegalArgumentException e) {
      e.printStackTrace();
      message = tempMessage.append("IllegalArgumentException\r\n").toString();
      display.append(message);
    } catch (IllegalAccessException e) {
      e.printStackTrace();
      message = tempMessage.append("IllegalAccessException\r\n").toString();
      display.append(message);
    } catch (InvocationTargetException e) {
      e.printStackTrace();
      tempMessage.append("InvocationTargetException\r\n");
      message = tempMessage.append(e.getCause().toString() + "\r\n").toString();
      display.append(message);
    }
    return null;
  }