我有一個Foo類型的子類型。爲什麼GenSet聲明具有不變類型參數?
我有一個包含,除其他事項外,一個Foo另一個類:
class FooResult(val foo: Foo ...
我有一組FooResult,我想拉FOOS出它與地圖(),然後計算該組(Foos)和另一組Foos之間的差異。 「結果」下面是將[FooResult]和 - 這是關鍵的部分 - 包是一組[_ <:富]
第二行不會編譯。當bundle是Set [Foo]而不是Set [_ <:Foo]時,它工作得很好 - 引入了協變性。這是錯誤:
type mismatch;
found : Set[Foo]
required: scala.collection.GenSet[_$1]
Note: Foo >: _$1, but trait GenSet is invariant in type A.
You may wish to investigate a wildcard type such as `_ >: _$1`. (SLS 3.2.10)
我一直無法找到任何簡單的解決方法。原諒我的無知,但爲什麼像GenSet這些'助手'類型被聲明爲不變?
我錯過了什麼(很有可能),或者這是某種程度上Scala奇妙的集合框架的弱點(我認爲不太可能)?
好的 - 你能或者有人請給我一些做我需要做的事情的例子嗎?是否需要建設新的集合? (即使我想訴諸於此,我也不認爲演員可以做到這一點。)謝謝! –
嗯,我只是用[Foo]而不是[ - <:Foo]的集合來編寫代碼。這似乎是最好的。 –