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

问题描述 投票:-1回答:1
Function<Integer, String> intToString = Object::toString

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

请帮我解决它的工作原理。

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

java
1个回答
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();
    }
};

它是如何知道IntegerString类型参数只是在表达式Object::toString中没有提到的?这来自作业的左侧。编译器知道期望的函数类型,并从方法引用Function创建适当的内部匿名Object::toString实例。

警告:方法参考Object::toString仅在编译器可以清楚地推断出预期类型的​​情况下才允许,因为此表达式的类型不清楚。根据上下文(例如左侧),同样的Object::toString也可以成为Consumer<Point>而不是Function<Integer, String>,然后实施void accept(Point t)方法。

© www.soinside.com 2019 - 2024. All rights reserved.