我想做什么:
getMapType(String.class,String.class); //returns me a MapType of Map<String,String>
我尝试过的事情:
public static <K extends Class<?>, V extends Class<?>> MapType getMapType(K keyClass, V valueClass) {
return objectMapper.getTypeFactory().constructMapType(HashMap.class, keyClass,valueClass);
}
当声明K时,这给了我一个警告,V正在扩展该类。
The type parameter V should not be bounded by the final type Class<?>. Final types cannot be further extended
我知道这意味着任何类都不能扩展Class,因为它是最后一个类。如果我删除extends Class<?>
,则方法constructMapType(...)将因类型而失败。
我的问题是我如何实施我的方法,所以我没有得到这个警告?
答案 0 :(得分:2)
看起来你可能正在寻找
public static <K, V> MapType getMapType(Class<K> keyClass, Class<V> valueClass){
...
}
答案 1 :(得分:0)
您可能正在考虑实施类似
的内容import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static <K, V> Map<K,V> getMapType(Class<K> keyClass, Class<V> valueClass) {
return new HashMap<>();
}
public static void main(String[] args) {
Map<String, String> mapType = HashMapExample.getMapType(String.class, String.class);
}
}
考虑查看java中Collections类的一些源代码 - 它看起来如下
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
return new SynchronizedMap<>(m);
}
答案 2 :(得分:0)
如果方法中实际未引用类型K
和V
,则只需使用通配符:
public static MapType getMapType(Class<?> keyClass, Class<?> valueClass) {
return objectMapper.getTypeFactory().constructMapType(
HashMap.class, keyClass, valueClass);
}