Ste*_*eve 0 java java-8 supplier
在下面的代码中,我尝试将info方法称为供应商.(info方法重载:一个是String,另一个是供应商.)编译器抱怨"方法info(String)不适用于参数Supplier<Double>".我的期望是通过发送供应商对象来调用info方法来获取供应商.我可以帮助理解这个错误吗?
Supplier<Double> randomSupplier = new Supplier<Double>()
{ public Double get()
{ return Math.random(); }
};
logger.info(randomSupplier); <----
Run Code Online (Sandbox Code Playgroud)
假设你logger是一个java.util.logging.Logger...
根据Javadoc的Logger.info说法,它期待一个Supplier<String>,并且你给它一个Supplier<Double>.
要解决这个问题,你需要给它一个Supplier<String>.你可以这样写一个:
final Supplier<String> randomSupplier =
new Supplier<String>() {
public String get() {
return Double.toString(Math.random());
}
};
Run Code Online (Sandbox Code Playgroud)
或者像这样:
final Supplier<String> randomSupplier =
() -> Double.toString(Math.random());
Run Code Online (Sandbox Code Playgroud)
你甚至可以写:
logger.info(() -> Double.toString(Math.random()));
Run Code Online (Sandbox Code Playgroud)
并且Java将神奇地推断出你的lambda是一个Supplier<String>(因为其他重载info并不采用功能接口类型).