Java反射:如何获得Field作为Arraylist的值<>

时间:2017-04-09 08:30:27

标签: java android reflection

我有一个菜单对象。

这有Arrraylist<MenuItemImpl>到&#34; mItems&#34;名称。这是隐藏。

MenuItemImpl)是一个隐藏&amp;受保护的类。 见课程(here

现在,我怎么能得到这个arraylist。

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
    { 

      List<Field> list = getAllFields(menu);
      for(Field f: list)
      {
          if(f.getName().equals("mItems"))
           {
             f.setAccessible(true);
             return f.get( /* here */ );   // <<--- I use new Arraylist<Object> , but get exception
           }
       }
   }

public static List<Field> getAllFields(Object obj)
    {
        List<Field> res = new ArrayList<>();
        res.addAll(Arrays.asList(obj.getClass().getDeclaredFields()));
    if (obj.getClass().getSuperclass() != null)
    {
        res.addAll(Arrays.asList(obj.getClass().getSuperclass().getDeclaredFields()));
    }

    return res;
}

在f.get()中我使用new Arraylist<Object>,但得到异常

请帮帮我。坦克

1 个答案:

答案 0 :(得分:1)

哦,我得到了答案。

for(Field f: list)
      {
          if(f.getName().equals("mItems"))
           {
             f.setAccessible(true);
             return f.get(menu);
           }
       }