2012-02-17 100 views
1

这是我的文件(修订版):爪哇 - 反射提取类

 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 - 提取接口到文件](http://stackoverflow.com/questions/9318961/java-extract-interface-to-file) – amit 2012-02-17 14:48:42

+4

什么问题? – 2012-02-17 14:49:16

+0

我需要第一部分的帮助。 我应该得到 (+)复合 *** ( - )INT重新 ( - )INT重新 但我的输出是 +复杂 ------- -int re + Complex ------- -int im – Dannzor 2012-02-17 14:51:25

回答

3

不好意思的人,恐怕你的代码离解决方案很远,给你正确的答案就像是作弊...我会推荐你​​以下的方法。

  1. 创建一个名为printClassDefinition(类clazz所),这将打印otuput的第一线,一旦您完成此,创建一个只运行你的代码,这部分主要方法的功能,运行它几次并确保这个功能本身产生正确的输出。
  2. 创建一个名为printFields(Class clazz)的函数。此类循环遍历类的所有字段,并仅打印字段的名称。
  3. 在1中创建的主体中,为您的分隔线添加打印语句,并调用您在步骤2中创建的功能。与步骤1中一样,练习您的代码并确保到目前为止,您对结果。
  4. 创建一个名为printField(Field)的函数在printFields的循环内,将println函数替换为printField的调用。
  5. 现在让您的printField函数为每个字段打印正确的输出。
  6. 再次练习你的主要,你的班级和领域输出应该在现阶段。
  7. 与2相似,创建printMethods(Class clazz)。将此调用添加到您的主体中,然后练习。
  8. 与4类似,在printMethods中创建printMehod(方法方法)并替换println。就是这样!
+0

我对这么多问题感到非常不满,不幸的是我不太擅长编程,我正在努力尝试最好的 - 我已经基本读过几乎两本书(开发JAVA软件 - Winder/Roberts和Java Essentials - Cay Horstmann)和几乎所有的时间用Google搜索。 我会将我目前的新代码添加到我的主帖中,请告诉我,如果我正处于正确的轨道上,至少您的第一步 - 否则我会重新考虑退出我的课程,因为我似乎无法理解基本的编程。 – Dannzor 2012-02-17 20:18:01