1.比如在Camera的test case里面想获取Gallery2中的某个抽象类类的一个protected变量。此抽象类在Camera 中实现。

想访问Gallery2中的surfaceTextureScreenNail中的mRequestCount变量。

protected int mRequestCount = 0;

...在Camera中的CameraScreenNail.java extends surfaceTextureScreenNail

直接访问变量mRequestcount = ...

进行赋值引用。

 

即:A包里面有个abstract B类,C包里面有个D extends B 类,和E类,想在E里面访问B类的protected变量。

 

(1)  B.class.getDelaredField("string");  

//string为你想访问的那个变量,这里一定要用B,不能用D,也就是一定要用定义这个变量的那个类,而非其子类。

//这样返回一个Field类型的变量

Field fid =  B.class.getDelaredField("string");  

(2) fid.setAccessible(true);

(3) fid.get(object);

此object可以用子类D的object,此中:

先在Camera.java中获取CameraScreenNail(D) object,然后通过传入此object得到mRequestCount变量。而CameraScreenNail在ActivityBase中定义。

 

完整代码:

Field fd = ActivityBase.class.getDeclaredField("mCameraScreenNail");

fd.setAccessible(true);

CameraScreenNail csn = (CameraScreenNail)fd.get(mActivity);

其中mActivity是Camera object。

上面通过Camera把定义在ActivityBase中的mCameraScreenNail拿到了,下面再通过

CameraScreenNail拿到其父类的变量mRequestCount;

Field fid = SurfaceTextureScreenNail.class.getDeclaredField("mRequestCount");

fid.setAccessible(true);

int fpsJisuan = (Intefer)fid.get(csn);

 

这样就可以了。

总结:通过XX.class.getDeclaredField("变量名")得到这个变量名的Field 类型 的fd;

再setAccessible(true);

最后再fd.get(object);

object为"变量名"的类对象。

相关文章:

  • 2021-12-03
  • 2021-10-29
  • 2021-03-26
  • 2022-01-05
  • 2022-12-23
  • 2021-06-03
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-05
  • 2022-12-23
  • 2021-11-10
  • 2022-12-23
  • 2021-11-17
相关资源
相似解决方案