在閱讀有效的 java 第 5 章第 27 條時它談?wù)撏ㄓ脝卫J剑含F(xiàn)在假設(shè)您要提供一個標(biāo)識函數(shù)。每次需要時都創(chuàng)建一個新的會很浪費,因為它是無狀態(tài)的。如果泛型被具體化,則每種類型都需要一個標(biāo)識函數(shù),但由于它們已被刪除,因此您只需要一個泛型單例。這是它的外觀:public class GenericSingleton<T> { private static UnaryFunction<Object> IDENTIFY_FUNCTION = new UnaryFunction<Object>() { @Override public Object apply(Object args) { return args; } }; @SuppressWarnings("unchecked") public static <T> UnaryFunction<T> identityFunction() { return (UnaryFunction<T>) IDENTITY_FUNCTION; } public static void main(String[] args) { String[] strings = {"jute", "hemp", "nylon"}; UnaryFunction<String> sameString = identityFunction(); for (String s : strings) { System.out.println(sameString.apply(s)); } Number[] numbers = {1, 2.0, 3L}; UnaryFunction<Number> sameNumber = identityFunction(); for (Number n : numbers) { System.out.println(sameNumber.apply(n)); } }}我無法理解apply方法實際上做了什么!這就像獲取一個對象并返回它自己。為什么?一些無用的樣本?請有人告訴我用例嗎?
1 回答

幕布斯6054654
TA貢獻1876條經(jīng)驗 獲得超7個贊
一個用例是Collectors.toMap()
.
假設(shè)您有一個由唯一鍵標(biāo)識的項目列表,并且您希望Map
從該唯一鍵到對象本身。
Collectors.toMap()
需要兩個功能:
一種從對象中提取密鑰
另一個從對象中提取值
由于值應(yīng)該是對象本身,因此您需要一個接受對象并返回相同對象的函數(shù) - 這就是您的標(biāo)識函數(shù)。
添加回答
舉報
0/150
提交
取消