4

我在 Java 中使用反射。

这是我的代码:

  public String getClassFields(Class aClass)
  {
  String ClassFields = "";
  Field[] Fields = aClass.getDeclaredFields();
  boolean isPublic;
  String separator = System.getProperty( "line.separator" );
  for (Field f : Fields) 
  {
    isPublic = Modifier.isPublic(f.getModifiers());
    if (isPublic)
        ClassFields += "public " + f.getType() + " " + f.getName() + separator;
    else
        ClassFields += "private " + f.getType() + " " + f.getName() + separator;
  }    
  return ClassFields;

}

如果Class中的字段如下:

private int Diameter;
private Colour Colour;

我在上面发布的代码返回以下内容:

private int Diameter
private class Colour Colour

如何修改我的代码以从该行中删除额外的“类”字:

private class Colour Colour
4

1 回答 1

4

现在,您将获得由以下提供的默认字符串表示形式Class#toString()

将对象转换为字符串。字符串表示是字符串“类”或“接口”,后跟一个空格,然后是类的完全限定名称,格式为getName. 如果此Class对象表示原始类型,则此方法返回原始类型的名称。如果此Class对象表示 void,则此方法返回“void”。

所以你想使用不同的方法来获取类的名称。改变

f.getType()

((Class) f.getType()).getName()
// or
((Class) f.getType()).getSimpleName()

旁注:不要在这样的循环中执行字符串连接。因为它每次都必须复制字符串,所以会导致二次 ( O(n^2)) 渐近运行时。改用 a StringBuilder

于 2013-03-25T05:45:30.687 回答