【发布时间】:2019-06-25 12:51:09
【问题描述】:
我想创建枚举类,将 BiConsumer 作为构造函数参数。如果我这样做,一切正常
public enum BiConsumerEnum {
BI_CONSUMER(((Integer i, String s) -> Collections.nCopies(i, s).forEach(System.out::println)));
private BiConsumer<Integer, String> biConsumer;
public static void main(String[] args) {
BiConsumerEnum.BI_CONSUMER.accept(3, "X");
}
BiConsumerEnum(BiConsumer<Integer, String> biConsumer) {
this.biConsumer = biConsumer;
}
public void accept(Integer i, String s) {
this.biConsumer.accept(i, s);
}
}
但是如果把代码改成这样:
public enum BiConsumerEnum {
BI_CONSUMER((Integer i, String s) -> printString());
// main(), constructor and accept()
private static BiConsumer<Integer, String> printString() {
return (Integer i, String s) -> Collections.nCopies(i, s).forEach(System.out::println);
}
代码运行不正常,我收到警告:return value is never used
我应该如何从构造函数中提取方法,而不是在里面写整个 lambda?
【问题讨论】:
-
您的第二个 sn-p 使用调用
printString()的BiConsumer创建BI_CONSUMER。它不会调用printString()返回的BiConsumer。 -
也许你的意思是
BI_CONSUMER(printString()); -
@SotiriosDelimanolis 是的,没错,这行得通!为什么我没有早点想出这个想法,如果它那么容易!谢谢!
-
@SotiriosDelimanolis 我鼓励你将你的评论变成一个 OP 可以接受的答案
标签: java lambda functional-programming functional-interface