[英]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.