这是我的文件(已更新):
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”的打印,并且我的格式通常混乱了。我可以使用所有可能的帮助。谢谢。
最佳答案
抱歉,恐怕您的代码离解决方案还有很长的路要走,向您发送正确的答案就像作弊一样。不过,我还是建议您采用以下方法。
创建一个名为printClassDefinition(Class clazz)的函数,这将打印otuput的第一行,一旦完成,创建一个main方法,该方法仅运行代码的这一部分,请运行几次,并确保该函数本身产生正确的输出。
创建一个名为printFields(Class clazz)的函数。此类遍历该类的所有字段,并且仅打印该字段的名称。
在1中创建的主体中,为分隔线添加一条print语句,并调用在步骤2中创建的函数。与在步骤1中一样,练习代码并确保到目前为止,您对结果满意。
创建一个名为printField(Field)的函数,在printFields循环内,将您的println函数替换为对printField的调用。
现在,使您的printField函数为每个字段打印正确的输出。
再次锻炼您的主体,在这个阶段您的班级和领域的输出应该是正确的。
与2相似,创建printMethods(Class clazz)。将此呼叫添加到您的主体,然后进行锻炼。
类似于4,创建printMehod(方法方法)并在printMethods中替换println。就是这样!