【问题标题】:Displaying Field type with Java reflection使用 Java 反射显示字段类型
【发布时间】:2013-03-14 13:18:00
【问题描述】:

我在 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

【问题讨论】:

  • "class ", "" 调用replace ?

标签: java class reflection types field


【解决方案1】:

现在,您将获得Class#toString() 提供的默认字符串表示:

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

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

f.getType()

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 1970-01-01
    相关资源
    最近更新 更多