java.util.function.Function如何具有Object类的方法引用toString方法

时间:2019-04-12 14:26:18

标签: java

Function<Integer, String> intToString = Object::toString

上面的代码是方法参考的示例

请帮助我。

根据我的理解,方法参考应该与功能接口抽象方法(R apply(T))具有相同的方法签名。

1 个答案:

答案 0 :(得分:0)

从本质上讲,您是对的。给声明的变量赋值,例如

Function<Integer, String> intToString = value;

然后,value必须是Function<Integer, String>,且必须是

public String apply(Integer t) { ... }

方法。

棘手的是,像Object::toString这样的方法引用表达式是语法糖

Function<Integer, String> intToString = new Function<Integer,String>() {
    public String apply(Integer t) { 
        return t.toString();
    }
};

如何知道仅在表达式Integer中未提及的StringObject::toString类型参数?这来自作业的左侧。编译器知道所需的功能类型,并根据方法引用Function创建适当的内部匿名Object::toString实例。

注意:仅当编译器可以明确推断出期望的类型时,才允许使用方法引用Object::toString,因为该表达式的类型不清楚。根据上下文(例如,左侧),相同的Object::toString也可以成为Consumer<Point>而不是Function<Integer, String>,然后实现方法void accept(Point t)。 / p>