在閱讀有效的 java 第 5 章第 27 條時它談論通用單例模式:現在假設您要提供一個標識函數。每次需要時都創建一個新的會很浪費,因為它是無狀態的。如果泛型被具體化,則每種類型都需要一個標識函數,但由于它們已被刪除,因此您只需要一個泛型單例。這是它的外觀: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條經驗 獲得超7個贊
一個用例是Collectors.toMap()
.
假設您有一個由唯一鍵標識的項目列表,并且您希望Map
從該唯一鍵到對象本身。
Collectors.toMap()
需要兩個功能:
一種從對象中提取密鑰
另一個從對象中提取值
由于值應該是對象本身,因此您需要一個接受對象并返回相同對象的函數 - 這就是您的標識函數。
添加回答
舉報
0/150
提交
取消