Gee*_*eek 7 java generics effective-java
考虑Effective Java泛型章节中UnaryFunction定义的接口.
public interface UnaryFunction<T> {
T apply(T arg);
}
Run Code Online (Sandbox Code Playgroud)
和以下代码返回 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;
}
Run Code Online (Sandbox Code Playgroud)
为什么演员IDENTITY_FUNCTION要(UnaryFunction<T>)安全?
这本书说的是我要问的问题,但我不能遵循这里的逻辑.我们在哪里调用apply执行身份操作的函数?我很困惑,因为它是返回传递给它的同一个对象而不修改任何东西的函数.
IDENTITY_FUNCTION
(UnaryFunction<T>)的强制转换生成一个未经检查的强制转换警告,因为UnaryFunction<Object>它不适UnaryFunction<T>用于每个人T.但是身份函数是特殊的:它返回其参数未经修改,因此我们知道将其用作UnaryFunction<T>任何值的类型都是安全的T.因此,我们可以放心地抑制由此强制转换生成的未经检查的强制转换警告.完成此操作后,代码将编译而不会出现错误或警告.