gpt4 book ai didi

java - 如何创建填充并返回现有或新集合的通用方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:22:22 24 4
gpt4 key购买 nike

我目前正在开发一个存储库,它允许用户将对象保存到外部存储。我想添加对列表和集合的支持,所以我添加了这样的函数:

public <E extends Persistable> List<E> readList(String fileName, List<E> defaultValue)
public <E extends Persistable> Set<E> readSet(String fileName, Set<E> defaultValue)

现在我认为添加对每种类型的 Collection 的支持会很好。我想到了这样的事情:

public <C extends Collection<E>, E extends Persistable> C readCollection(String fileName, C defaultValue)

我的问题如下:如果用户调用 readCollection(FILE, collection) 并将非空 collection 作为第二个参数传递,我可以使用它来添加将项目存储到该 collection。但是,如果用户之前存储过项目并将 null 作为第二个参数传递,我必须创建一个新的 collection 实例。这在 Java 中甚至可能吗?

最佳答案

而不是传递一个默认值 Collection例如,您可以传递 Supplier<C> :

public <C extends Collection<E>, E extends Persistable> C readCollection(String fileName, Supplier<C> supplier)
{
C collection = supplier.get();
...
return collection;
}

现在您可以使用 Supplier<C>创建 Collection 的实例.

您可以通过以下方式调用该方法:

readCollection(name, ArrayList::new)

或:

readCollection(name, HashSet::new)

如果您仍然需要向现有 Collection 添加元素的功能例如,您可以创建两个方法 - readCollectionreadNewCollection .

作为替代方案,您可以保留您的单例 C readCollection(String fileName, C defaultValue)方法,并决定在 null 时创建哪个实例作为第二个参数传递。例如,您可以决定默认类型为 ArrayList .

顺便说一句,即使您保留原来的两种方法,您也会遇到同样的问题 - readListreadSet - 自 readSet可以返回任何 Set实现,所以如果第二个参数是 null , 它必须决定哪个 Set要使用的实现。

关于java - 如何创建填充并返回现有或新集合的通用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52420963/

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