gpt4 book ai didi

java - 我应该在我的界面上公开 Stream 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:24:54 25 4
gpt4 key购买 nike

如果我正在编写 .NET 代码,我会经常公开 IEnumerable<T>无论在哪里,它都可能有意义。也许这取决于 LINQ 以及您可以使用 foreach 的事实,但这样做感觉“正确”。

private List<String> _myList;

public IEnumerable<String> MyList
{
get { return _myList; }
}

现在我正在编写 Java 8 代码,我正在考虑是否应该公开 Stream<T>可能以同样的方式?也许是因为我必须调用Collection.stream()而且感觉是在“干活”,但又感觉不对?

private Collection<String> myCollection;

public Stream<String> getStuff() {
return myCollection.stream();
}

Stream<T>意味着以与 IEnumerable<T> 相同的方式暴露在界面上可能是?

最佳答案

你问错了问题。毕竟,同时支持两者并不难,例如

Collection<Foo> getStuff();
default Stream<Foo> stuff() {
return getStuff().stream();
}

因此使用您的接口(interface)的代码不需要明确的 stream() 调用,而 interface 的实现者也不需要为它操心。

因为无论是通过 Collection.stream() 还是显式地,您总是公开一个 Stream 支持,所以问题是您是否要公开 Collection 。虽然为 Collection 后端提供 Stream 很便宜,但从 收集 Collection 可能会很昂贵>流

因此,公开两种方式的接口(interface)表明它们同样可用,而对于不使用 Collection 后端的实现,这些方法中的一种可能比另一种更昂贵。

因此,如果您确定所有实现(包括 future 的实现)将始终使用(或必须支持)Collection,那么通过 API 将其公开为 Collection< 可能会很有用 支持 Stream 不支持的某些操作。如果您支持通过公开的 Collection 修改基础数据,则尤其如此。

否则,仅支持Stream 访问可能是更好的选择。这使实现可以自由地拥有 Collection 以外的其他后端。但是,这也意味着此 API 不支持 Java 8 之前的 Java 版本。

关于java - 我应该在我的界面上公开 Stream<T> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com