Java - Класс Извлечения Отражения - PullRequest
1 голос
/ 17 февраля 2012

Это мой файл (ОБНОВЛЕНО):

     import java.lang.reflect.*;

public class ClassExtract {

   public void printClassDefinition (String[] args){
       try {
            Class cls = Class.forName(args[0]);
            Field fieldlist[] 
              = cls.getDeclaredFields();
            for (int i 
              = 0; i < ((fieldlist.length + 1) - (fieldlist.length)); i++) 
            {
                Field fld = fieldlist[i];
                System.out.println("+ " + fld.getDeclaringClass().toString().replaceAll("class", ""));
                System.out.println("------");
            }                              
               for (int j = 0; j < fieldlist.length; j++) {
                   Field fld1 = fieldlist[j];
                   int mod = fld1.getModifiers();
                   System.out.println(Modifier.toString(mod).toString().replaceAll("public", "+") 
                           .replaceAll("private", "-").replaceAll("protected", "#") + " " + 
                           fld1.getType() + " " + fld1.getName());

               }
            }
          catch (Throwable e) {
             System.err.println(e);
          }

   }
  public static void main(String args[])
  {
      new ClassExtract().printClassDefinition(args);

   }
}

, и я должен прочитать этот файл:

    public class Complex{
    private int re;
    private int im;

    public Complex(int re, int im){
    this.re = re;
    this.im = im;
         }


    public Complex add(Complex h){
            return new Complex(this.re+h.re, this.im+h.im);
        }



    public Complex sub(Complex h){
    return new Complex(this.re-h.re, this.im-h.im);
        }

    public String toString(){
        if (im >= 0){
            return re +" + " +im + "i";
        }
        else return re +"  " +im + "i";
    }

    public static void main(String[] args){

    Complex c1 = new Complex(5,1);
    Complex c2 = new Complex(5,0);

    System.out.printf("c1 = %s, c2 = %s\n", c1, c2);
    System.out.printf("c1 + c2 = %s\n", c1.add(c2) );
     }}

, и он должен сгенерировать что-то вроде:

    (+) Complex
     ***
    (-) int re
    (-) int im
     ***
    (+) Complex(re:int, im:int)
    (+) add():Complex
    (+) sub():Complex
    (+) toString():String
    (+) main()

Так как мой файл повторяется, я получаю отпечаток "re" и "int" после строки, например, и мой формат в целом испорчен.Я мог бы использовать всю возможную помощь.Благодаря.

1 Ответ

3 голосов
/ 17 февраля 2012

Извините, чувак, я боюсь, что ваш код находится далеко от решения, поэтому выслать правильный ответ - все равно, что обманывать ... Я бы порекомендовал вам следующий подход.

  1. Создатьфункция с именем printClassDefinition (Class clazz) Это напечатало бы первую строку вашего отчета, после того, как вы завершите это, создадите метод main, который только запускает эту часть вашего кода, запустите его пару раз и убедитесь, что эта функциясам производит правильный вывод.
  2. Создайте функцию с именем printFields (Class clazz).Этот класс проходит по всем полям вашего класса и печатает только имя поля.
  3. В главном, который вы создали в 1, добавьте оператор print для вашей разделительной линии и вызовите функцию, которую вы создали вшаг 2. Как и в шаге 1, выполните свой код и убедитесь, что пока вы довольны результатами.
  4. Создайте функцию с именем printField (Field) Внутри цикла printFields замените вашу функцию println навызов функции printField.
  5. Теперь заставьте вашу функцию printField печатать правильный вывод для каждого поля.
  6. Снова проучите ваш основной, вывод ваших классов и полей на этом этапе.
  7. Аналогично 2, создайте printMethods (класс clazz).Добавьте этот вызов к основному и выполните упражнение.
  8. Подобно 4, создайте printMehod (метод Method) и замените println в printMethods.И это все!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...