2016-01-20 106 views
1

我正在实现一个字节消息解串器,它将在调度器接口上调度反序列化的消息,并返回抛出的所有Throwable的可观察值,以便客户机代码可以处理这些错误。创建主题

方法的原型的草图这样做:

Observable<Throwable> dispatchDeserializedMessages(Observable<byte[]>, Dispatcher) 

现在由于最近我所熟悉的Subject<T, R>,这将完全适合在这里,如

Subject<byte[], Throwable> dispatchDeserializedMessages(Dispatcher) 

但没有方便的方法,如create()这很容易授人以观察员,可观察到的。所有的具体实现统一TR,所以我没办法使用其中的一个。

所以我的具体问题:有没有办法可以实例化一个合适的Subject<byte[], Throwable>,它代表ObserverObservable?是否有任何其他方式可以创建这样的Subject,而不必实施(在必须手动委托每个实施的方法的意义上)整个Subject,和Observer

+0

你是否会发现将'byte []'封装在一个可能名为'DeserializedMessage'或类似的类中的优点? –

+0

不是,我会说这是一个缺点。如果我理解正确,你建议将解码步骤外包给一个方法,从'byte []'块生成'DeserializedMessage's。我宁愿留在现在使用dual/visitor编码(在调度器上调用onTypeOfMessage()),因为它解决了表达式问题所需的部分(类型安全的可扩展工具)。 –

+1

YMMV,但我只是讨厌传递原始类型,因为总是看起来有些变化,而且你没有任何回旋余地。 –

回答

2

切换到基于主题的API可能不是最好的主意,因为您将潜在的冷API更改为强制热API。在您的原始设计中,Throwable序列的使用者将假定其订阅时,也会订阅Observable<byte[]>

否则,我有一个blog series关于创建Subject s但你无法避免与他们沉重的举重。