(Java 8) java.util.function.Supplier
(Java 8) java.util.function.Supplier
在下面的代码中,我尝试调用获取供应商的信息方法。 (info 方法被重载:一个接受字符串,另一个接受供应商。)编译器抱怨 "The method info(String) is not applicable for the argument Supplier<Double>
"。我的期望是通过发送 Supplier 对象来调用获取 Supplier 的信息方法。我可以得到一些帮助来理解这个错误吗?
Supplier<Double> randomSupplier = new Supplier<Double>()
{ public Double get()
{ return Math.random(); }
};
logger.info(randomSupplier); <----
您可以尝试这种方式以 java 8 种方式获取 Supplier
并通过将 Supplier
转换为 String
进行记录
Supplier<Double> randomSupplier = () -> Math.random();
info(randomSupplier);
private void info(Supplier<Double> randomSupplier) {
System.out.println(randomSupplier.get());
}
假设您的 logger
是 java.util.logging.Logger
。 . .
根据 the Javadoc for 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
的另一个重载不采用功能接口类型)。
在下面的代码中,我尝试调用获取供应商的信息方法。 (info 方法被重载:一个接受字符串,另一个接受供应商。)编译器抱怨 "The method info(String) is not applicable for the argument Supplier<Double>
"。我的期望是通过发送 Supplier 对象来调用获取 Supplier 的信息方法。我可以得到一些帮助来理解这个错误吗?
Supplier<Double> randomSupplier = new Supplier<Double>()
{ public Double get()
{ return Math.random(); }
};
logger.info(randomSupplier); <----
您可以尝试这种方式以 java 8 种方式获取 Supplier
并通过将 Supplier
转换为 String
Supplier<Double> randomSupplier = () -> Math.random();
info(randomSupplier);
private void info(Supplier<Double> randomSupplier) {
System.out.println(randomSupplier.get());
}
假设您的 logger
是 java.util.logging.Logger
。 . .
根据 the Javadoc for 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
的另一个重载不采用功能接口类型)。