刚遇到一个我想使用泛型的地方,但我不确定如何让它按照我想要的方式工作。
我的数据层中有一个方法可以执行查询并返回对象列表。这是签名。
public List getList(Class cls, Map query)
这就是我希望调用代码的样子。
List<Whatever> list = getList(WhateverImpl.class, query);
我想这样做,这样我就不必将其转换为 List<Whatever>
出来,这让我想到了这个。
public <T> List<T> getList(Class<T> cls, Map query)
但现在我遇到的问题是我得到的总是具体的List<WhateverImpl>
通过了,而我希望它是 Whatever
界面。我尝试使用 super 关键字但无法弄清楚。那里有泛型大师知道如何做到这一点吗?
最佳答案
你需要像这样定义方法:
public <B, C extends B> List<B> getList(final Class<C> cls, final Map<?, ?> query)
关于带有通配符的Java泛型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008004/