2016-09-06 108 views
2

我在java中有一个对象,它有多个字段,我不知道它们的类型。我正在使用反射来获取字段和它们的值,但它不像它看起来那样工作。通过反射在对象中获取字段和它们的值Java

Object obj = gettingObjectFromSomeMethod(); 
    for (Field field : obj.getClass().getDeclaredFields()) { 
      field.setAccessible(true); 
      Object value = field.get(obj); 
      if (value != null) { 
       System.out.println(field.getName() + "=" + value); 
      } 
     } 

输出:

serialVersionUID=8683452581122892189 
DEFAULT_CAPACITY=10 
EMPTY_ELEMENTDATA=[Ljava.lang.Object;@5649fd9b 
DEFAULTCAPACITY_EMPTY_ELEMENTDATA=[Ljava.lang.Object;@6adede5 
elementData=[Ljava.lang.Object;@2d928643 
size=4 
MAX_ARRAY_SIZE=2147483639 

但是当我打印的对象时,它提供了以下输出

[{long_name=Los Angeles, short_name=Los Angeles, types=[locality, political]}, {long_name=Los Angeles County, short_name=Los Angeles County, types=[administrative_area_level_2, political]}, {long_name=California, short_name=CA, types=[administrative_area_level_1, political]}, {long_name=United States, short_name=US, types=[country, political]}] 

我想这些字段的值。请建议做什么

+0

看来类的_object_的实现一个整洁的toString。为什么不打电话呢? – Jayan

+0

可能第二个输出不显示对象的* fields *,而是显示其字段的解释。 –

+0

@Jayan toString不会有帮助。我只需要得到short_name –

回答

1

我刚刚测试了它返回的代码列表作为对象响应,所以你可以像下面这样做。然而,如果你想要特定的领域,你可以指定如果条件在内部为field.getName()循环。

if(obj instanceof List){ 
    List myList = (List) obj;// this is your object which return from gettingObjectFromSomeMethod 


      for (Object object : myList) { 
       for (Field field : object.getClass().getDeclaredFields()) { 
        field.setAccessible(true); 

         System.out.println("field_Name"+ 
         field.getName() + "field_Value"+field.get(object)); 
       } 
      } 
} 

如果此解决方案不工作,那么请打印System.out.println(obj.getClass().getName());,让我知道它将返回时间

+0

感谢它的工作,但输出中唯一缺少的是short_name字段及其值。 输出: 'FIELD_NAME的serialVersionUID FIELD_VALUE 3801124242820219131 FIELD_NAME头FIELD_VALUE LONG_NAME =洛杉矶 FIELD_NAME尾FIELD_VALUE类型= [局部性,政治] FIELD_NAME accessOrder FIELD_VALUE假 FIELD_NAME的serialVersionUID FIELD_VALUE 3801124242820219131 FIELD_NAME头FIELD_VALUE LONG_NAME =洛杉矶县 FIELD_NAME tail field_Value types = [administrative_area_level_2,political]' –

+0

可能的原因是它可能是服务器端类的私有变量,会让你知道我是否发现了任何好的东西。如果这会对你有利,然后善意地提出投票为此 –

+0

Mavric我刚刚证实它应该与公关通过在日志中打印 –

相关问题