java:Map <string,list <interface =“”>&gt;无法应用于Map <string,list <implementation =“”>&gt;

时间:2018-03-16 10:16:56

标签: java oop generic-programming

我遇到了一个关于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列表的方法即可。但是为什么当包装到地图中并且编译会失败?

0 个答案:

没有答案