我有一个对象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不允许我这样做。有什么方法可以获取该值?
说明文件:
VMemRead:http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-parser/vapor-parser-javadoc/cs132/vapor/ast/VMemRead.html#source
VMemRef:http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-parser/vapor-parser-javadoc/cs132/vapor/ast/VMemRef.html
VMemRef.Global:http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-parser/vapor-parser-javadoc/cs132/vapor/ast/VMemRef.Global.html
非常感谢你!
最佳答案
这些嵌套类是静态的。对于它们中的每一个,您都需要引用实例才能访问字段值。 VMemRef
的实例不具有(记录的)VMemRef.Global
或VMemRef.Stack
类型的成员字段。您必须在r
之外的其他地方查找这些类的数据。
换句话说,仅因为在VMemRef
中有一个r
实例,并不意味着周围有任何VMemRef.Global
或VMemRef.Stack
实例。因此,无法访问“那些值”,因为“那些值”不一定存在!
编辑重新阅读API后,我看到VMemRef
是抽象类,而r.source
是VMemRef.Global
或VMemRef.Static
的实例。那改变了故事。您可以执行以下操作:
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
}