考虑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