首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩大vavr序列?

如何扩大vavr序列?
EN

Stack Overflow用户
提问于 2020-07-11 14:39:57
回答 1查看 152关注 0票数 0

我注意到narrow method存在于序列中。我们将如何做相反的事情,以一种类型安全的方式从子类序列转到超类序列?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-12 00:36:39

Seq.narrow()正是这样做的:从某种类型的T序列到那种类型的超级S序列( T )。

下面的示例编译:

代码语言:javascript
复制
class Superclass {}
class Subclass extends Superclass {}

class Test {
    void test() {
        Seq<Subclass> subs = List.of(new Subclass(), new Subclass());
        Seq<Superclass> supers = Seq.narrow(subs);
        // both 'subs' and 'supers' are safe to use
    }
}

这是因为vavr集合是不可变的,所以当您有一个Seq<T>时,您可以确保序列中的所有值都是S类型的值。由于您不能更改vavr集合,因此将对Seq<T>的引用缩小到Seq<S>始终是安全的(TS的一个子类型),因为您永远不能通过向原始Seq<T>中添加S类型的值来更改原始Seq<T>。这将违反原始Seq<T>的类型安全性,因为现在它将包含一个不是T的元素。请注意,对于可变集合,不能保证这一点,因此,所有此类可变集合的缩小都具有内在的不安全性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62850536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档