如何将字符串值传递给以下函数

how to pass a String value to the following function

我有以下消费者功能

Collection<String> abc;
@Override
public void something(Consumer<? super String> visitor) {

 abc.add(visitor);
}

我想将收到的值添加到 abc 列表中的 something 函数。但我不知道这将如何运作?

在 Main 中,我有以下代码

String value = "usman"
   something(what should I write here to pass value and use in something)

如果您的方法 something 有参数 Consumer<? super String> visitor,这意味着您向方法 something 传递了一个函数,它接受一个字符串参数并且 returns 什么都不接受。

也就是说,您应该传递一个定义为 lambda 表达式的函数: s -> abc.add(s)

此类函数消耗 字符串值(尚未提供)并将其添加到某个集合中。

因此,您应该有这样的代码:

import java.util.*;
import java.util.function.*;


public class MyClass {
    
    static Collection<String> abc = new ArrayList<>();
    
    static void something(Consumer<? super String> visitor) {
        String value = "usman"; 
        visitor.accept(value);
    }

    public static void main(String [] args) {
        
        something(s -> abc.add(s));
        
        System.out.println(abc);
    }
}

打印的输出显示 something 中定义的本地值已添加到集合中:

[usman]

更新

如果需要使用something方法外传递的值,可以直接忽略传递给Consumer的值:

public static void main(String[] args) {
    String mainValue = "mainValue";
    Supplier<String> supplier = () -> "supplier";

    something(s -> abc.add("literal"));
    something(s -> abc.add(mainValue));
    something(s -> abc.add(supplier.get()));

    System.out.println(abc);
}

然后只有 outer 值被添加到集合中:

[literal, mainValue, supplier]