我正在尝试为具有流畅样式返回类型的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
延续是连接调用的更好方法,但那里有一个特征。