Java反射调用

//属性获取
try {
    Field field = recycler.getClass().getDeclaredField("mCachedViews");
    field.setAccessible(true); // 抑制Java对修饰符的检查
    ArrayList cacheViews = (ArrayList) field.get(recycler);
    //get获取结果,set方法设值
    ...
} catch (Exception e) {
    e.printStackTrace();
   
}

//方法调用(getClass获取本类的方法属性,getSuperclass取父类的)
Method method = pool.getClass().getSuperclass().getDeclaredMethod("size");
            method.setAccessible(true); // 抑制Java的访问控制检查
int size = (int) method.invoke(pool);
return size;

//Class信息的获取
Class clazz = Class.forName("android.support.v7.widget.RecyclerView$RecycledViewPool$ScrapData");//内部类加$符号
recycledViewPool.getClass();//通过对象获取
  1. getDeclaredMethods() :反映此 Class 对象表示的类或接口声明的所有方法,但不包括继承的方法。 简称:所有的方法除了继承的
  2. getMethods():反映此 Class 对象所表示的类或接口的指定公共成员方法。 简称:公共方法包括继承的
  3. 对上面的补充:xxx.getClass().getSuperclass(),这可以获得继承的父类的Class信息

你可能感兴趣的:(Java反射调用)