如何扩大vavr序列?

如何扩大vavr序列?,vavr,Vavr,我注意到序列的存在。如何做相反的事情,以类型安全的方式从子类序列到超类序列?正是这样做的:从某个类型的序列T到该类型的超类型序列S 以下示例编译: class超类{} 类子类扩展超类{} 课堂测试{ 无效测试(){ Seq subs=List.of(new Subclass(),new Subclass()); 序号super=序号窄(subs); //“SUB”和“supers”都可以安全使用 } } 这是因为vavr集合是不可变的,因此当您有一个Seq时,可以确保序列中的所有值也是S类型的

我注意到序列的存在。如何做相反的事情,以类型安全的方式从子类序列到超类序列?

正是这样做的:从某个类型的序列
T
到该类型的超类型序列
S

以下示例编译:

class超类{}
类子类扩展超类{}
课堂测试{
无效测试(){
Seq subs=List.of(new Subclass(),new Subclass());
序号super=序号窄(subs);
//“SUB”和“supers”都可以安全使用
}
}
这是因为vavr集合是不可变的,因此当您有一个
Seq
时,可以确保序列中的所有值也是
S
类型的值。由于您无法更改vavr集合,因此将对
Seq
的引用缩小到
Seq
始终是安全的(
T
S
的子类型),因为您永远无法通过向其中添加
S
类型的值来更改原始
Seq
。这将违反原始
Seq
的类型安全性,因为现在它将包含一个不是
T
的元素。请注意,对于可变集合,这是无法保证的,因此所有此类可变集合的缩小都是不安全的