当我阅读有效Java项目27时,类型之间的投射UnaryFunction<Object>和UnaryFunction<T>困惑我.
interface UnaryFunction<T> {
T apply(T t);
}
public class Main {
private static final UnaryFunction<Object> IDENTITY = new UnaryFunction<Object>() {
public Object apply(Object t) {
return t;
}
};
@SuppressWarnings("unchecked")
public static <T> UnaryFunction<T> identityFunction() {
return (UnaryFunction<T>) IDENTITY;
}
public static void main(String ... args) {
UnaryFunction<A> identityA = Main.identityFunction();
A a = identityA.apply(new A());
}
}
class A {}
Run Code Online (Sandbox Code Playgroud)
为什么UnaryFunction<Object>可以投入UnaryFunction<T>?
我知道通用类型将在编译器之后被删除.因此,(UnaryFunction<T>) IDENTITY最终将(UnaryFunction<Object>) IDENTITY,这将在运行系统中工作. …