我遇到了一个关于java泛型的难题,我之前从未见过并在这里发帖,希望你能对它进行一次检查。 这里是整个代码:
public class FakeTester
{
public static void main(String[] args)
{
List<FakeConcretClassA> concretFakes = new ArrayList<>();
concretFakes.add(new FakeConcretClassA());
Map<String, List<FakeConcretClassA>> fakemap = new HashMap<>();
fakemap.put("key1", concretFakes);
printFakeVals(concretFakes);
priFakeMap(fakemap);
}
public static void priFakeMap(Map<String, List<? extends FakeInterface>>
fakemap)
{
fakemap.forEach((genre, fakes) -> {
fakes.forEach(fake -> System.out.println(fake.fakeVal()));
});
}
public static void printFakeVals(List<? extends FakeInterface> fakes)
{
fakes.forEach(fake -> System.out.println(fake.fakeVal()));;
}
}
FakeInterface 只是一个简单的界面,需要一个返回硬编码值的方法, FakeConcretClassA 返回&#39; 111&#39;实施。这里奇怪的是 printFakeVals(concretFakes); 可以传递java编译,但 priFakeMap(fakemap); 不能。 根据我的理解, FakeConcretClassA 实现 FakeInterface 所以我可以将 FakeConcretClassA 列表作为param传递给接收实现FakeInterface的objs列表的方法即可。但是为什么当包装到地图中并且编译会失败?