JAVA:如何访问另一个对象的子类?

时间:2012-12-04 05:14:54

标签: java

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

这些嵌套类是静态的。对于每个实例,您需要对实例的引用才能访问字段值。 VMemRef的实例没有(已记录)类型为VMemRef.GlobalVMemRef.Stack的成员字段。对于来自这些类的数据,您必须在r以外的其他地方查找。

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

编辑重新阅读API后,我发现r.source是一个抽象类,VMemRef.GlobalVMemRef.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
}