簡體   English   中英

使用AnyVals在Scala世界中開發Fluent風格的API,並通過隱式進行繼承

[英]Developing Fluent style APIs in Scala world, with AnyVals, and inheritance via implicits

我正在嘗試為具有流暢樣式返回類型的Java API提供Scala包裝器API。 具體來說,我希望Scala盡可能多地依賴AnyVal實例,以減少分配。

我找到了一個簡單的解決方案 ,可以放松這種流暢的返回,但是問題是WriteStream無法返回正在被調用的實際類型的類型,因此在調用write之后將無法調用AsyncFile方法。

一種解決方案要求包裝器具有類型類定義,該包裝器能夠返回被調用對象的類型,但是我還沒有設法使其完全正常工作。 首先,我似乎無法獲取隱式變量,並將其傳遞給write()方法。 其次,我認為我的隱式包裝沒有正確定義,因為我需要一個采用JavaWriteStream的包裝,而輸出是AsyncFile。 因此,似乎我需要為這個基於隱式的繼承的每種可能的組合使用一個包裝器,並且坦率地說,它需要做的事情看起來很復雜。

將WriteStream和AsyncFile分開的想法是,因為您有多個類從WriteStream繼承(讀取:隱式轉換),這避免了在其他擴展類中復制WriteStream的每個方法的需要。

最后,我還想知道,在Scala世界中嘗試堅持這種流利的風格是否是最好的選擇,還是在Scala世界中是否存在以更優雅的方式解決此問題的替代方法。 我想到Scala Future的andThen延續是連接調用的一種更好的方法,但是這里有一個特質。

最終弄清楚了實現此工作的代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM