在Scala世界中使用AnyVals开发Fluent样式API,并通过implicits继承

时间:2013-12-17 13:29:11

标签: scala dsl fluent

我正在尝试为具有流畅样式返回类型的Java API提供Scala包装器API。具体来说,我希望我的Scala尽可能地依赖AnyVal实例以减少分配。

我找到了一个simple solution来放松这个流畅的返回,但问题是WriteStream不能返回它被调用的实际类型的类型,因此在调用后无法调用AsyncFile方法写。

alternative solution需要一个带有类型定义的包装器,它能够返回被调用对象的类型,但我还没有设法让它完全正常工作。首先,我似乎无法获取隐式变量并将其传递给write()方法。其次,我不认为我的隐式包装器是正确定义的,因为我需要一个包含JavaWriteStream的包装器,而out是AsyncFile。所以,似乎我需要为这种基于隐式的继承的每种可能组合提供一个包装器,坦率地说,它看起来很复杂,需要它做什么。

将WriteStream和AsyncFile分开的想法是你有多个类从WriteStream继承(读取:隐式转换),这避免了在其他扩展类中复制WriteStream的每个方法的需要。

最后,我还想知道在Scala世界中是否尝试遵循这种流畅的风格是最好的事情,或者是否有其他方法可以在Scala世界中以更优雅的方式解决这个问题。我认为Scala Future的andThen延续是连接调用的更好方法,但那里有一个特征。

1 个答案:

答案 0 :(得分:0)

最终找出the code来完成这项工作。