我有一个对象VMemRead的实例(我们称之为r)。 VMemRead的构造函数看起来像

VMemRead(SourcePos sourcePos, VVarRef dest, VMemRef source)


具有字段destsource。我知道我想访问dest时可以执行r.dest。但是,我想更深入地了解源代码。

VMRef具有两个嵌套类VMemRef.GlobalVMemRef.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.GlobalVMemRef.Stack类型的成员字段。您必须在r之外的其他地方查找这些类的数据。

换句话说,仅因为在VMemRef中有一个r实例,并不意味着周围有任何VMemRef.GlobalVMemRef.Stack实例。因此,无法访问“那些值”,因为“那些值”不一定存在!

编辑重新阅读API后,我看到VMemRef是抽象类,而r.sourceVMemRef.GlobalVMemRef.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
}

10-08 12:50