首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Java 8) java.util.function.Supplier

(Java 8) java.util.function.Supplier
EN

Stack Overflow用户
提问于 2018-09-01 17:37:17
回答 2查看 6.1K关注 0票数 1

在下面的代码中,我尝试调用获取供应商的info方法。( info方法重载:一个是字符串,另一个是供应商。)编译器抱怨“方法信息(字符串)不适用于参数Supplier<Double>”。我的期望是通过发送一个供应商对象来调用获取供应商信息的方法。我能得到一些帮助来理解这个错误吗?

代码语言:javascript
复制
Supplier<Double> randomSupplier = new Supplier<Double>()
{   public Double get()
    {   return Math.random(); }    
};

logger.info(randomSupplier); <----
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-01 17:50:50

假设您的loggerjava.util.logging.Logger。。。

根据Logger.info的说法,它需要一个Supplier<String>,而你却给它一个Supplier<Double>

要解决这个问题,您需要给它一个Supplier<String>。你可以写一个这样的:

代码语言:javascript
复制
final Supplier<String> randomSupplier =
    new Supplier<String>() {
        public String get() {
            return Double.toString(Math.random());
        }
    };

或者像这样:

代码语言:javascript
复制
final Supplier<String> randomSupplier =
    () -> Double.toString(Math.random());

你甚至可以写:

代码语言:javascript
复制
logger.info(() -> Double.toString(Math.random()));

Java会神奇地推断您的lambda应该是一个Supplier<String> (因为info的其他重载不采用函数接口类型)。

票数 8
EN

Stack Overflow用户

发布于 2018-09-01 17:44:56

您可以尝试这样做:以java 8的方式获取Supplier,并通过将Supplier转换为String进行日志记录。

代码语言:javascript
复制
Supplier<Double> randomSupplier = () -> Math.random();
info(randomSupplier);

  private void info(Supplier<Double> randomSupplier) {
    System.out.println(randomSupplier.get());
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52130659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档