3

我正在迭代一条快速修复消息。对于给定的字段,如何在不知道类型的情况下获取该字段的值?
quickfix.Message 也有类似 ' Double getDouble(int field), String getString(int field)' 之类的方法,还有类似 etc之类的方法DoubleField getField(DoubleField), StringField getField(StringField )
我期待一个类似 ' Object get(int field)' 的方法,它返回 Object
我如何在不知道字段类型的情况下检索值?

4

1 回答 1

6

简短的回答: getString(int field)实际上是您正在寻找的通用方法。您可以在存在的任何字段上调用它。因为当您考虑它时,FIX 消息只是一堆序列化为字符串并连接起来的字段,对吧?

更长的答案: FIX 消息,在内部,只是将字段存储为字符串。当您将字段存储到 Message 时,它​​不会保留您的 Field 对象引用;它只是再次将其存储为字符串。同样,当收到一条消息时,它不会分配一堆新的 Field 对象……那是浪费时间和内存。字段对象在您查询时按需创建,非字符串字段在您查询时进行转换。

当您调用getInt()时,实际发生的是该方法提取字段的字符串值并将其转换为 int 然后返回它。同样,对于 for getField(IntField),它提取字符串,将其转换为 int,然后构造一个新的 IntField 并返回它。

所有字段都作为字符串从交易对手发送给您。因此,getString(int field)它是完全通用的,并为您提供有关该字段的所有信息。

于 2013-07-30T03:21:16.160 回答