带有通配符的Java泛型问题

标签 java generics wildcard

刚遇到一个我想使用泛型的地方,但我不确定如何让它按照我想要的方式工作。

我的数据层中有一个方法可以执行查询并返回对象列表。这是签名。

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/

相关文章:

java - 使用非静态类方法而不引用

C# 泛型 : cast generic type to value type

具有多种类型的一个参数的C#泛型方法

带有 super 的 Java 通配符

java - TestNG 多个测试类 - 运行其他类

java - 调用restTemplate.exchange()时出现IllegalStateException

java - 如何使用scanner和next()但不继续

java - 这个错误描述是什么意思?

search - Solr 中的通配符搜索

sql - "NOT IN"带有前导通配符的子查询