嵌套类型的通配符

问题描述 投票:1回答:1

我试图理解为什么此方法的类型擦除不适用于通配符。

public boolean foo(TypeA<TypeB<?>, TypeB<?>> bar) {
    return true;
}

// instantiate an object
TypeA<TypeB<TypeC>, TypeB<TypeC>> somethingOtherThanFooBar = ...;

// TypeA<TypeB<?>, TypeB<?>> cannot be applied to TypeA<TypeB<TypeC>, TypeB<TypeC>>
foo(somethingOtherThanFooBar);

我知道如果方法签名为pulic <T, U> boolean foo(TypeA<TypeB<T>, TypeB<U>> bar),它将起作用,但是由于我无法理解的原因,这不适用于通配符。

java generics types wildcard
1个回答
1
投票

规则是:A是-a B表示G<A>是-a G<? extends B>G<B>是-a G<? super A>

© www.soinside.com 2019 - 2024. All rights reserved.