私はJavaにかなり慣れておらず、問題に遭遇しました。私の仕事は、オブジェクトのタイプとすべての属性の名前とタイプをファイルに書き込むメソッドwrite(Object obj)を含むクラスを作成することです。オブジェクトは属性としてオブジェクト/オブジェクトの配列を持っている可能性があるため、再帰が含まれます。
コードは次のとおりです。
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:引数は配列ではありません」です。