`

如何访问一个对象的私有变量

阅读更多

如何访问一个对象的私有变量

Filed under: 项目日志 — zhangruimin @ 22:12 Edit This

为什么要访问一个对象的私有变量呢?在单元测试时可能要查看私有变量是否被正确赋值,也有可能单元测试时要用到一个对象让它的一个私有变量为特定值,但又没有set方法。

私有变量不能通过对象直接访问,但是并不是说一个类的私有变量就不能访问。有一个绝招就是利用反射机制。

/**
* Sets the id of doc to be docid by reflection.
*
* @param doc the WordSource to set id
* @param docid the document id to be set
*/
private void setDocId(WordSource doc, WordSourceId docid) throws Exception {
Field f = doc.getClass().getDeclaredField(”sourceId”);
f.setAccessible(true);
f.set(doc, docid);
f.setAccessible(false);
}

WordSource 有一个私有变量sourceId。因为WordSource 没有setSourceId方法,只有通过这种方式来得到一个特定sourceId  的WordSource 用于测试。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics