以下是我正在处理的一些代码的示例:
public interface FooMaker<T extends Enum<T> & FooType>
{
public List<Foo<T>> getFoos(String bar);
}
Run Code Online (Sandbox Code Playgroud)
让我们进一步假设FooMaker将有许多不同的具体实现.所以我写了一些代码来使用FooMakers.
FooMaker<?> maker = Foos.getRandomMaker();
List<Foo<?>> fooList = maker.getFoos("bar"); //error here!
Run Code Online (Sandbox Code Playgroud)
第二行代码导致问题,eclipse告诉我代码应该是:
FooMaker<?> maker = Foos.getRandomMaker();
List<?> fooList = maker.getFoos("bar");
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么Foo声明作为List中的参数化类型必须消失才能使返回类型正确.
有任何想法吗?