小编Rob*_*Han的帖子

为什么UnaryFunction <Object>可以转换为UnaryFunction <T>?

当我阅读有效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,这将在运行系统中工作. …

java generics effective-java

5
推荐指数
1
解决办法
137
查看次数

标签 统计

effective-java ×1

generics ×1

java ×1