Function<Integer, String> intToString = Object::toString
上面的代码是方法参考的示例
请帮助我。
根据我的理解,方法参考应该与功能接口抽象方法(R apply(T))具有相同的方法签名。
答案 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
中未提及的String
和Object::toString
类型参数?这来自作业的左侧。编译器知道所需的功能类型,并根据方法引用Function
创建适当的内部匿名Object::toString
实例。
注意:仅当编译器可以明确推断出期望的类型时,才允许使用方法引用Object::toString
,因为该表达式的类型不清楚。根据上下文(例如,左侧),相同的Object::toString
也可以成为Consumer<Point>
而不是Function<Integer, String>
,然后实现方法void accept(Point t)
。 / p>