Java:使用供应商在运行时传递值
我试图解决的问题如中所述 下面的代码正在抛出Java:使用供应商在运行时传递值,java,functional-programming,Java,Functional Programming,我试图解决的问题如中所述 下面的代码正在抛出 SupplyMe.java:18: error: local variables referenced from a lambda expression must be final or effectively final Supplier<String> helloStrSupplier = () -> changingStr; 我该怎么做才能使供应商能够在运行时提供该值?我可以通过这样做使其正常工作 impor
SupplyMe.java:18: error: local variables referenced from a lambda expression must be final or effectively final
Supplier<String> helloStrSupplier = () -> changingStr;
我该怎么做才能使供应商能够在运行时提供该值?我可以通过这样做使其正常工作
import java.util.function.Supplier;
public class SupplyMe {
public static String changingStr = "";
private Supplier<String> supplied;
public SupplyMe(Supplier<String> supplied) {
this.supplied = supplied;
}
public void printSupplied() {
System.out.println(supplied.get());
}
public static void main(String[] args) {
changingStr = "hi";
//Supplier<String> helloStrSupplier = changingStr;
Supplier<String> helloStrSupplier = new DynamicSupplier();
SupplyMe mySupplyMe = new SupplyMe(helloStrSupplier);
mySupplyMe.printSupplied();
changingStr = "hi2";
mySupplyMe.printSupplied();
}
static class DynamicSupplier implements Supplier<String> {
@Override
public String get() {
return changingStr;
}
}
}
这听起来像是一个错误。你到底想做什么?为什么你认为改变供应商提供的价值就能解决问题?@JacobG。我试图解决与supplier相关的问题,而不是其他接口观察者模式。创建额外的类DynamicSupplier没有任何意义,只是为了返回静态字段的值。供应商HellostSupplier=->changingStr;也可以。
import java.util.function.Supplier;
public class SupplyMe {
public static String changingStr = "";
private Supplier<String> supplied;
public SupplyMe(Supplier<String> supplied) {
this.supplied = supplied;
}
public void printSupplied() {
System.out.println(supplied.get());
}
public static void main(String[] args) {
changingStr = "hi";
//Supplier<String> helloStrSupplier = changingStr;
Supplier<String> helloStrSupplier = new DynamicSupplier();
SupplyMe mySupplyMe = new SupplyMe(helloStrSupplier);
mySupplyMe.printSupplied();
changingStr = "hi2";
mySupplyMe.printSupplied();
}
static class DynamicSupplier implements Supplier<String> {
@Override
public String get() {
return changingStr;
}
}
}