我對Java相當陌生,遇到了問題。我的任務是創建一個包含方法write(Object obj)的類,該方法將對象的類型以及所有屬性的名稱和類型寫入文件中。因爲對象可能有對象/對象數組作爲屬性,所以涉及遞歸。Java中的數組的反射
下面是代碼:
public void write(Object obj) throws Exception {
if(obj == null)
{
out.close();
return;
}
Class c = obj.getClass();
Class d;
Field fields_c[] = c.getDeclaredFields();
System.out.println("class_name:" + c.getName());
int i, j;
String tab = new String("");
for(i = 0; i < indent_level; i++)
{
tab = tab + "\t";
}
out.write(tab + "class_name:" + c.getName() + "\n");
for(i = 0; i < fields_c.length; i++) {
System.out.println("field name: " + fields_c[i].getName() + " ");
c = fields_c[i].getType();
fields_c[i].setAccessible(true);
if(c.isPrimitive()) {
out.write("\t" + tab + "field_name:" + c.toString() + "\n");
}
else if(c.isArray()) {
System.out.println("field of type array with elements of type:" + c.getComponentType());
for(j = 0; j < Array.getLength(c); j++)
{
d = Array.get(c, j).getClass();
indent_level = indent_level + 1;
this.write(d);
indent_level = indent_level - 1;
}
}
else
{
System.out.println("field is not primitive of type:" + c.getName());
Object foo = fields_c[i].get(obj);
indent_level = indent_level + 1;
this.write(foo);
indent_level = indent_level - 1;
}
}
}
例外,如果出現我調用該方法並給出具有一個數組屬性的對象;所有的屬性,直到數組正確寫入輸出文件。 異常是「java.lang.IllegalArgumentException:參數不是數組」。
你有大量的不良編碼實踐。爲什麼有人會給你任務來處理一些相當抽象的東西(訪問類和字段,然後再分析它們),如果你對java_沒有什麼新意的話?例如,你可以通過賦值來初始化一個字符串。我認爲拋出異常是因爲C當時不是數組,而是一個字段。嘗試將其轉換爲數組...但idk如何。你正在打擾抽象的東西,這是非常沒用的IMO。 – MarioDS 2012-04-09 21:53:32
我認爲你在代碼中混合了一些東西。你只想打印屬性名稱和類型,還是要包含值?如果您只需要名稱和類型,則不需要遞歸,而且您不必遍歷數組的元素。 – Sandro 2012-04-09 22:12:38
我還沒有從我自己的意願中挑選此作業...... – Sebi 2012-04-09 22:12:43