Java取消选中使用泛型从基类转换为子类

时间:2016-04-11 17:06:12

标签: java generics casting

我有以下内容:

class Main {
    static class TypeA<A> {}
    static class TypeB<A, B> extends TypeA<A> {}

    static <X> void aMethod(TypeA<X> a) {
        if (a instanceof TypeB) {
            TypeB<X, ?> b = (TypeB<X, ?>) a;
            // Do stuff with b
        }
    }

    public static void main(String[] args) {
        aMethod(new TypeB<Integer, Object>());
    }
}

我从TypeA<X>TypeB<X, ?>获得了未经检查的投射警告。根据{{​​1}}的定义,名为X的类型是相同的,因此我不明白为什么会失败。我可以通过投放TypeB来丢失类型信息,但我需要保留TypeB<?, ?> b = (TypeB<?, ?>) a;

为什么我无法安全地从带有泛型参数的基类转换为具有相同泛型参数的子类?

0 个答案:

没有答案