2012-02-17 6 views
1

Это мой файл (ОБНОВЛЕНО):Java - Reflection Extract Class

 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» после строки, например, и мой формат вообще перепутался. Я мог бы использовать всю возможную помощь. Благодарю.

+0

Возможный дубликат [Java - Extract Interface to File] (http://stackoverflow.com/questions/9318961/java-extract-interface-to-file) – amit

+4

В чем вопрос? –

+0

Мне нужна помощь с первой частью. Я должен получить (+) Комплекс *** (-) INT повторно (-) INT повторно но мой выход + комплекс ------- -INT re + Комплекс ------- -int im – Dannzor

ответ

3

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

  1. Создайте функцию под названием printClassDefinition (класс clazz) Это напечатать первую строку otuput, как только что вы выполнили это, создайте основной метод, который работает только эта часть вашего кода, запустите его пару раз и убедитесь, что эта функция сама по себе производит правильный вывод.
  2. Создайте функцию printFields (Class clazz). Этот класс пропускает все поля вашего класса и печатает только имя поля.
  3. В основном вы создали в 1, добавьте инструкцию печати для своей разделительной линии и вызовите функцию, созданную вами на шаге 2. Как и в шаге 1, выполняйте свой код и убедитесь, что до сих пор вы довольны результаты.
  4. Создайте функцию, называемую printField (поле) Внутри цикла printFields замените вашу функцию println на вызов printField.
  5. Теперь сделайте свою функцию printField напечатать правильный вывод для каждого поля.
  6. Упражнение снова, ваш основной, ваш класс и выпуск полей должны быть на месте на этом этапе.
  7. Как и для 2, создайте printMethods (Class clazz). Добавьте этот вызов к своему основному и упражнителю.
  8. Как и в случае с 4, создайте метод печатиMehod (метод метода) и замените println в методах printmethods. Вот и все!
+0

Мне очень жаль, что я так много спрашиваю, и я, к сожалению, не очень хорошо разбираюсь в программировании, я стараюсь и стараюсь изо всех сил - я в основном читаю почти две книги страница за страницей (Разработка JAVA Software - Winder/Roberts & Java Essentials - Cay Horstmann) и поиск по всему миру почти все время. Я добавлю свой новый текущий код к моему основному адресу, скажите, пожалуйста, если я нахожусь на правильном пути, по крайней мере, ваш первый шаг - иначе я передумаю выйти из своего курса, так как я, похоже, не могу понять базовое программирование. – Dannzor