如何向供应商添加值< list>

bd1hkmkf  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(352)

我觉得我对供应商用例有一些错误的解释。下面是一个示例,我想为列表添加值。但当我试图从供应商处获取列表时,它显示为空。

Supplier<List<String>> str = ArrayList::new;

str.get().add("Hi");
System.out.println(str.get().size());

返回:0

vm0i2vca

vm0i2vca1#

Supplier<List<String>> 是一个函数,每当 get 方法正在运行。
就你而言, str 类似于以下lambda表达式:

Supplier<List<String>> str = () -> new ArrayList<>();

也就是说每次 str.get() 调用时,函数被调用,而主体 new ArrayList<>() 执行,从而每次生成一个新列表。
如果你想要 Supplier 要始终返回相同的列表,则需要捕获它:

List<String> list = new ArrayList<>();
Supplier<List<String>> str = () -> list;

每次都是这样 str.get() 运行时,它将返回它捕获的相同列表。但是,依我看,这似乎不是一个好的做法,只保留对变量的引用而不是将其保留在供应商后面(这意味着函数产生了一个值)似乎更为正确。

kninwzqo

kninwzqo2#

每次呼叫 str.get() 将示例化一个新的 List ,它将是空的。
你的两个电话 str.get() 返回两个不同的示例。您向第一个元素添加了一个元素 List ,但第二个 List 是空的。
您必须存储对已创建对象的引用 List 如果您想访问它:

List<String> list = str.get();
list.add("Hi");
System.out.println(list.size());

相关问题