私は共変の Scala type を持っていThing[+B]
ます。実装は、内部可変キューを使用します。
private val queue : AsyncQueue[B]()
AsyncQueue はカスタムの可変キュー実装であり、不変バージョンでは簡単に実装できない特別なプロパティを備えています。可変であるため、AsyncQueue は不変です。したがって、共変型では使用できませんThing
。
は非公開であるため、コードの正確性を保証できます。たとえば、 type の参照queue
に代入しようとはしません。キャストを使用せずに共変を維持しながら、この作業を行うにはどうすればよいですか?queue
Queue[Any]
Thing
B
(キャストを使用した解決策は、エンキュー/デキュー時にオブジェクトを宣言してAsyncQueue[Object]
キャストすることですが、これは非常に見苦しいものです。)
ETA : 型の共分散を理解しています。共変型の AsyncQueue を宣言したり、AsyncQueue 自体を共変にすることができない理由も理解しています。私の質問は、どこでもキャストを使用しないようにこのコードを設計する方法です。