我有一个对象VMemRead的实例(我们称之为r)。 VMemRead的构造函数看起来像
VMemRead(SourcePos sourcePos, VVarRef dest, VMemRef source)
包含字段dest
和source
。我知道当我想访问dest时,我可以r.dest
。但是,我想更深入地进入源头。
VMRef有两个嵌套类VMemRef.Global
和VMemRef.Stack
。 VMemRef.Global有构造函数
VMemRef.Global(SourcePos sourcePos, VAddr<VDataSegment> base, int byteOffset)
我想访问int byteOffset
。实际上,我想做r.source.Global.byteOffset
之类的事情,但Java不允许我这样做。
我有什么方法可以访问该值吗?
VMemRef.Global:http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-parser/vapor-parser-javadoc/cs132/vapor/ast/VMemRef.Global.html
非常感谢!
答案 0 :(得分:1)
这些嵌套类是静态的。对于每个实例,您需要对实例的引用才能访问字段值。 VMemRef
的实例没有(已记录)类型为VMemRef.Global
或VMemRef.Stack
的成员字段。对于来自这些类的数据,您必须在r
以外的其他地方查找。
换句话说,仅仅因为 VMemRef
中有r
的实例,并不意味着存在VMemRef.Global
或VMemRef.Stack
的任何实例VMemRef
左右。因此,无法访问“那些值”,因为“那些值”不一定存在!
编辑重新阅读API后,我发现r.source
是一个抽象类,VMemRef.Global
是VMemRef.Static
或{{1}的实例}}。这改变了故事。你可以这样做:
if (r.source instanceof VMemRef.Global) {
VMemRef.Global source = (VMemRef.Global) r.source;
// access fields specific to VMemRef.Global
} else if (r.source instanceof VMemRef.Stack) {
VMemRef.Stack source = (VMemRef.Stack) r.source;
// access fields specific to VMemRef.Stack
}