0

我有一个对象 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 _

非常感谢你!

4

1 回答 1

1

这些嵌套类是静态的。对于它们中的每一个,您都需要对实例的引用才能访问字段值。的实例VMemRef没有(记录的)类型为VMemRef.Global或的成员字段VMemRef.Stack。您必须在其他地方寻找r这些类的数据。

换句话说,仅仅因为您有VMemRefin的实例r,并不意味着存在VMemRef.Globalor的任何实例VMemRef.Stack。所以没有办法访问“那些值”,因为“那些值”不一定存在!

编辑重新阅读 API 后,我看到这VMemRef是一个抽象类,并且r.sourceVMemRef.Globalor的一个实例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
}
于 2012-12-04T05:24:50.313 回答