如何向供应商<List>添加价值



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

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

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

返回: 0

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()运行时,它只会返回它捕获的相同列表。但是,IMO,这似乎不是好的做法,只保留对变量的引用而不是将其保留在供应商后面(这意味着产生值的函数)似乎是相当正确的。

每次调用str.get()都会实例化一个新的List,该将为空。

str.get()的两个调用返回两个不同的实例。您在第一个List中添加了一个元素,但第二个List为空。

如果要访问已创建List,则必须存储对它的引用:

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

最新更新