2

我正在编写一些处理许多不同修复版本(4.2、4.3、4.4)的代码。我遇到的问题是,在编写处理程序对象时,我被迫复制代码,因为每个修复版本都将使用不同的处理程序。例如

@Handler    
public void executionHandler(quickfix.fix42.ExecutionReport execution, SessionID sessionID)  {
    System.out.println(execution.getClOrdID().getValue());
}

@Handler    
public void executionHandler(quickfix.fix43.ExecutionReport execution, SessionID sessionID)  {
    System.out.println(execution.getClOrdID().getValue());
}

我正在编写的实际代码要复杂得多(我正在检索几个字段并操作数据)。我想不出如何在不诉诸反思的情况下减少这种重复。

4

1 回答 1

1

具有讽刺意味的是,使 QuickFIX/J 更容易和更安全地使用的一些功能也会在您描述的情况下造成困难。处理程序方法和生成的消息类旨在支持类型安全,但您实际上需要更少的类型安全和更多的动态字段访问。生成的类是子类,quickfix.Message它是 的子类quickfix.FieldMap。FieldMap 类具有用于获取字段数据的公共访问器。类型安全的消息包装器使用这些来获取消息数据。

例如,

double averagePrice = message.getDouble(AvgPx.FIELD);

这适用于任何包含该字段的消息。所有生成的字段都有一个带有标签号的 FIELD 静态成员。该类quickfix.MsgType还具有消息类型的常量,这对于自定义动态消息调度很有用。

如果您正在访问像 MsgType 这样的消息头字段,请记住通过该message.getHeader()方法访问这些字段。

这是一个奖励提示。如果您不需要或不想要类型安全的消息包装器,您可以定义一个简单的自定义quickfix.MessageFactory来创建基本quickfix.Message对象。这将在处理传入消息时导致小的性能改进。

于 2012-04-26T11:08:57.323 回答