3

私は共変の Scala type を持っていThing[+B]ます。実装は、内部可変キューを使用します。

private val queue : AsyncQueue[B]()

AsyncQueue はカスタムの可変キュー実装であり、不変バージョンでは簡単に実装できない特別なプロパティを備えています。可変であるため、AsyncQueue は不変です。したがって、共変型では使用できませんThing

は非公開であるため、コードの正確性を保証できます。たとえば、 type の参照queueに代入しようとはしません。キャストを使用せずに共変を維持しながら、この作業を行うにはどうすればよいですか?queueQueue[Any]ThingB

(キャストを使用した解決策は、エンキュー/デキュー時にオブジェクトを宣言してAsyncQueue[Object]キャストすることですが、これは非常に見苦しいものです。)

ETA : 型の共分散を理解しています。共変型の AsyncQueue を宣言したり、AsyncQueue 自体を共変にすることができない理由も理解しています。私の質問は、どこでもキャストを使用しないようにこのコードを設計する方法です。

4

3 に答える 3