【问题标题】:How to get original class of a field declared in java class如何获取在java类中声明的字段的原始类
【发布时间】:2013-07-26 05:29:53
【问题描述】:

我们开始吧,假设我有类名:

class Name {
  String firstName, lastName;
  // getters and setters, etc.
}

and then Name class's object is declared somewhere in other class :

class Other {
  Name name;
  // getter and setters, etc.
}

现在如果我做类似的事情:

Other o = new Other();
Field[] fields = o.getClass().getDeclaredFields();

fields[0] --> is 'name' the Object of 'Name' class

但是当我说field[0].getClass() 时:

它给了我java.lang.reflect.Field 类对象,而不是 Name 类对象。

如何从 'name'

等字段中获取 原始 类对象

【问题讨论】:

    标签: java reflection field


    【解决方案1】:

    Field.getType 方法返回一个 Class 对象,该对象标识此 Field 对象表示的字段的声明类型。

    【讨论】:

      【解决方案2】:
      This should help
      
      
      Other o = new Other();
      Class<?> classTemp1 = o.getClass();
      Field[] allFields = classTemp1.getDeclaredFields();
      

      现在您可以查询每个字段的名称、类型

      【讨论】:

        【解决方案3】:
        fields[i].getType()
        

        请检查 http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Field.html#getType()

        getType() 返回一个 Type 对象,该对象表示此 Field 对象所表示的字段的声明类型。

        field[0].getClass()
        

        将返回代表 field[0] 的 Type 对象,这显然是 field[0]。

        【讨论】:

          【解决方案4】:

          基本上,您需要向字段询问特定实例的值,例如

          Name name = (Name)fields[0].get(o);
          

          现在。像这样进行盲选是非常危险的,我可能只是先将其分配给Object,然后再执行instanceof,或者使用Field#getName 来确定字段的名称并从那里采取行动。 ..

          nb- 我会提到 getType,但 Evgeniy Dorofeev 打败了我,我不想从他的回答中拿走

          【讨论】:

            【解决方案5】:

            根据 Evgeniy 的回答,这条线就是你要找的:

            String actualClassName = fields[0].getType().getName();
            

            【讨论】:

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