考慮UnaryFunction
界面中定義的有效的Java泛型章節。爲什麼安全地抑制這種未經檢查的警告?
public interface UnaryFunction<T> {
T apply(T arg);
}
和返回UnaryFunction
// Generic singleton factory pattern
private static UnaryFunction<Object> IDENTITY_FUNCTION = new UnaryFunction<Object>() {
public Object apply(Object arg) { return arg; }
};
// IDENTITY_FUNCTION is stateless and its type parameter is
// unbounded so it's safe to share one instance across all types.
@SuppressWarnings("unchecked")
public static <T> UnaryFunction<T> identityFunction() {
return (UnaryFunction<T>) IDENTITY_FUNCTION;
}
爲什麼是IDENTITY_FUNCTION
到(UnaryFunction<T>)
投安全下面的代碼?
這本書說這是關於我問的問題,但我不能按照這裏的邏輯。我們在哪裏調用執行身份操作的apply
函數?我很困惑,因爲它是返回傳入它的同一對象而不修改任何內容的函數。
IDENTITY_FUNCTION的演員來
(UnaryFunction<T>)
產生 選中投預警,爲UnaryFunction<Object>
不是UnaryFunction<T>
爲每T
。但是身份識別功能是特殊的:它 返回未經修改的參數,所以我們知道無論T
的值如何使用 它作爲UnaryFunction<T>
是類型安全的。因此,我們可以自信地壓制 這個強制轉換生成的未經檢查的強制轉換警告。一旦我們完成了這些工作,代碼將會編譯時不會出現錯誤或 警告。
旁邊的問題:你在用什麼書,是否說這個代碼的重點是什麼? – asteri 2013-02-25 17:00:45
@Jeff有效的java是書名,它在泛型章節中有介紹,特別是在描述泛型函數的章節中。 – Geek 2013-02-25 17:11:32