在下面的代码中,我尝试调用获取供应商的info方法。( info方法重载:一个是字符串,另一个是供应商。)编译器抱怨“方法信息(字符串)不适用于参数Supplier<Double>”。我的期望是通过发送一个供应商对象来调用获取供应商信息的方法。我能得到一些帮助来理解这个错误吗?
Supplier<Double> randomSupplier = new Supplier<Double>()
{ public Double get()
{ return Math.random(); }
};
logger.info(randomSupplier); <----发布于 2018-09-01 17:50:50
假设您的logger是java.util.logging.Logger。。。
根据Logger.info的说法,它需要一个Supplier<String>,而你却给它一个Supplier<Double>。
要解决这个问题,您需要给它一个Supplier<String>。你可以写一个这样的:
final Supplier<String> randomSupplier =
new Supplier<String>() {
public String get() {
return Double.toString(Math.random());
}
};或者像这样:
final Supplier<String> randomSupplier =
() -> Double.toString(Math.random());你甚至可以写:
logger.info(() -> Double.toString(Math.random()));Java会神奇地推断您的lambda应该是一个Supplier<String> (因为info的其他重载不采用函数接口类型)。
发布于 2018-09-01 17:44:56
您可以尝试这样做:以java 8的方式获取Supplier,并通过将Supplier转换为String进行日志记录。
Supplier<Double> randomSupplier = () -> Math.random();
info(randomSupplier);
private void info(Supplier<Double> randomSupplier) {
System.out.println(randomSupplier.get());
}https://stackoverflow.com/questions/52130659
复制相似问题