[英]How java.util.function.Function can have a method reference of Object class toString method
Function<Integer, String> intToString = Object::toString
上面的代码是方法参考的例子
请帮助我它是如何工作的。
根据我的理解,方法参考应该具有与功能接口抽象方法( R apply(T) )相同的方法签名。
基本上,你是对的。 将一些东西分配给一个声明的变量
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();
}
};
它如何知道仅在表达式Object::toString
中未提及的Integer
和String
类型参数? 那来自作业的左侧。 编译器知道需要什么类型的函数,并从方法引用Object::toString
创建一个合适的内部匿名Function
实例。
警告:方法引用Object::toString
仅在编译器可以明确推断出预期类型的情况下才允许,因为此表达式的类型不清楚。 根据上下文(例如左侧),完全相同的Object::toString
也可以成为Consumer<Point>
而不是Function<Integer, String>
,然后实现方法void accept(Point t)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.